@Consumes JSON 在 REST 网络服务中每次使用不同数量的 JSON 值
@Consumes JSON in REST webservices with different number of JSON values each time
我想 @Consumes
一个 JSON 类型的 REST web 服务,但是 JSON 输入每次保存不同数量的值,例如
{"name":"x","age":23,"language":"java"}
或
{"name":"c","age":"34","language":"c++","db":"oracle"}
因此每次输入 JSON 可能会有所不同。如何在我的 REST 代码中使用这种类型的 JSON?
在 Java 中,您需要一个 class 镜像您的 JSON 的可能内容。
例如:
public class Developer {
private String name, language, db;
private int age;
// getters and setters
}
如果您的业务逻辑允许不止一种语言和数据库,您可以包括
private Set<String> language, db;
而不是字符串字段。
我得到的答案如下:
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 inside rest
好像我不知道密钥的名称所以我想解析整个 json 并对其进行一些操作。
由于您使用的是 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
我想 @Consumes
一个 JSON 类型的 REST web 服务,但是 JSON 输入每次保存不同数量的值,例如
{"name":"x","age":23,"language":"java"}
或
{"name":"c","age":"34","language":"c++","db":"oracle"}
因此每次输入 JSON 可能会有所不同。如何在我的 REST 代码中使用这种类型的 JSON?
在 Java 中,您需要一个 class 镜像您的 JSON 的可能内容。
例如:
public class Developer {
private String name, language, db;
private int age;
// getters and setters
}
如果您的业务逻辑允许不止一种语言和数据库,您可以包括
private Set<String> language, db;
而不是字符串字段。
我得到的答案如下:
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 inside rest
好像我不知道密钥的名称所以我想解析整个 json 并对其进行一些操作。
由于您使用的是 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