注意力!你不能紧张决定,只要告诉我往哪个方向思考!
我们有一个非常简单的服务:
@GET
@Path("/search")
@Consumes(MediaType.APPLICATION_JSON)
public Response getSubscriber(@QueryParam("data") SubscriberSearchFormData data){
System.out.println(data);
List <SubscrEntity> results = null //list of results
return Response.ok(results).build();
}
订阅者搜索表单数据类:
public class SubscriberSearchFormData {
private String name;
private String street;
private Integer contractNumber;
public static SubscriberSearchFormData fromString(String jsonRepresentation) throws Exception {
System.out.println("WE ARE HERE");
ObjectMapper mapper = new ObjectMapper(); // Jackson's JSON marshaller
SubscriberSearchFormData obj = null;
try {
obj = mapper.readValue(decoded, SubscriberSearchFormData.class);
} catch (IOException e) {
throw new Exception("Wrong JSON parameters!");
}
return obj;
}
//all getters and setters
}
按照计划,由于 fromString 方法,JSON 应该被自动解析为 SubscriberSearchFormData 类的对象。我们将继续与他合作。但是一旦我打电话给服务:
localhost:8080/application/rest/catalog/subscriber/search?data={
"name":"bbb",
"street":"eee",
"contractNumber":5
}
由于错误,一切都崩溃了:
11:24:04,050 WARN [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-3) RESTEASY002130:
Failed to parse request.: javax.ws.rs.core.UriBuilderException: RESTEASY003330:
Failed to create URI: http://localhost:8080/application/rest/catalog/subscriber/search?data={%20%22name%22:%22bbb%22,%20%22street%22:%22eee%22,%20%22contractNumber%22:%225%22}
同时, System.out.println("WE ARE HERE");它甚至没有被调用。也就是说,它甚至在调用之前就崩溃了fromString();
我正在研究这个第二天,没有什么可以解决的。
为您的 Chrome 浏览器安装 Postman 扩展,这将帮助您处理 HTTP 请求。
像这样实现方法:
该类
SubscriberSearchFormData需要添加一个默认构造函数和 Getters/Setters。接下来,向服务器发送 POST 请求:
并在方法中获取您的对象。