检查REST方法中是否存在JSON密钥

时间:2017-03-01 10:36:20

标签: java json rest post

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

我正在寻找符合jsonobject.haskey类型方法的内容。到目前为止,我遇到了杰克逊和json简单的图书馆,但很多关于它们的信息似乎已经过时,而且我很难驾驭。

我的目标是接受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失败了。

1 个答案:

答案 0 :(得分:1)

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

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

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

会序列化为:

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

然后您还可以设置(反)序列化的选项,以便解析器知道如何处理空值,例如,如果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
}
相关问题