我正在实现 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/