我正在实现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
失败了。
答案 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
}