我希望@Consumes
具有JSON类型的REST Web服务,但JSON输入每次都包含不同数量的值,例如
{"name":"x","age":23,"language":"java"}
或
{"name":"c","age":"34","language":"c++","db":"oracle"}
因此输入JSON每次都可能有所不同。如何在REST代码中使用这种类型的JSON?
答案 0 :(得分:0)
在Java中,您需要一个镜像JSON可能内容的类。
例如:
public class Developer {
private String name, language, db;
private int age;
// getters and setters
}
如果您的业务逻辑允许使用多种语言和数据库,则可以包括
private Set<String> language, db;
而不是String字段。
答案 1 :(得分:0)
我得到了如下答案:
public Response jsonREST(InputStream incomingData) {
StringBuilder jsonBuilder = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
String line = null;
while((line = in.readLine()) != null) {
System.out.println("output "+line);
jsonBuilder.append(line);
}
} catch(Exception e) {
System.out.println("Error Parsing: - ");
}
System.out.println("Data Received: " + jsonBuilder.toString());
return Response.status(200).entity(jsonBuilder.toString()).build();
}
谢谢,我需要的是我想在休息时解析我的json
就像我不知道密钥的名称所以我想解析整个json并对其进行一些操作。
答案 2 :(得分:0)
由于您使用的是Jersey并且消耗的JSON可能包含任意键值对,您可以在Jersey控制器中尝试这样的事情:
@POST
@Path("/json-map")
@Consumes(MediaType.APPLICATION_JSON)
public SomeSortOfResponse receiveArbitraryJsonMap(Map<String,String> map) {
// do stuff with map of key-value pairs
}
您的JSON应该解组到您可以使用的地图。
或者,如果您的JSON类似于任意列表,则为字符串:
@POST
@Path("/json-list")
@Consumes(MediaType.APPLICATION_JSON)
public SomeSortOfResponse receiveArbitraryJsonList(List<String> list) {
// do stuff with list
}
您需要为两个端点提供不同的@Paths