java - 检查 REST 方法中是否存在 JSON Key

标签 java json rest post

我正在实现 REST API,并想要检查通过我的 POST 方法传递的 JSON 格式的请求中是否存在 key 。

我正在寻找类似 jsonobject.haskey 的内容方法的类型。到目前为止,我已经遇到过 Jackson 和 json-simple 库,但它们的许多信息似乎已经过时,而且我在导航时遇到了困难。

我的目标是接受 JSON 格式的 POST 请求来创建资源实例。根据 JSON 对象中键的存在情况,将通过 setter 分配值。

如果您可以引导我访问一个库、一个 API 和一些示例,那将非常有帮助。

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "tags": ["home", "green"]
}

将被处理为

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "option":,
    "tags": ["home", "green"]
}

因为JSON.hasOptionKey失败。

最佳答案

执行此操作的标准方法是在 JSON 请求负载和域对象之间建立某种契约,显然您可以使用一些简单的 JSON 解析库手动解析 json,但它很容易出错。

使用类似 GSON 的内容,您可以使用 Java 对象表示 JSON 结构,反之亦然,例如:

class X {
    String id;
    List<String> values;
} 

将序列化为如下内容:

{"id": 3, "values": ["1", "2", "3"]}

然后,您还可以设置(反)序列化的选项,以便解析器知道如何处理 null,例如,如果 java 对象中缺少 id,则 JSON 将是

{"values": ["1", "2", "3"]}

更新

以下是 GSON 的使用示例(为简洁起见,删除了导入和 getter/setter):

public class Question42529415 {

    private static final Gson GSON = new GsonBuilder()
            .setPrettyPrinting()
            //.serializeNulls()
            .create();

    private static Item fromPost(String postRequestJson) {
        return GSON.fromJson(postRequestJson, Item.class);
    }

    private static String toClient(Item item) {
        return GSON.toJson(item);
    }

    public static void main(String[] args) {
        String clientReq = "{\n"
                + "    \"id\": 1,\n"
                + "    \"name\": \"A green door\",\n"
                + "    \"price\": 12.50,\n"
                + "    \"tags\": [\"home\", \"green\"]\n"
                + "}";

        Item item = fromPost(clientReq);
        System.out.println(item.getName() + " " + item.getOption());

        item.setOption("modified option");
        String modified = toClient(item);
        System.out.println(modified);
    }
}

class Item {
    private String id;
    private String name;
    private String option;
    private double price;
    private List<String> tags;

    // getters and setters
}

关于java - 检查 REST 方法中是否存在 JSON Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529415/

相关文章:

java - 在 Rest API 的查询参数中发送 pct (%)

java - 从 TableView javafx 中删除列

java - 如何将文本添加到新行

java - 如果我将 jenkins.war 和 nexus.war 放在一起,Tomcat 7 无法工作

javascript - 在 angularjs 中调用 http (RESTFUL WebAPI) 的正确方法

java - 使用 GET 方法进行 POST、PUT 或 DELETE

java - 如何在Java中为工具栏添加窗口API?

javascript - 使用文本和 span 标签创建动态 li 标签

php - json_decode, foreach 只从 json 字符串返回一行

python - 无法获取 Django 模板来打印格式化 JSON