我有一个复杂的对象,如下面的
public class TestFilter {
public TestFilter(){
}
private Set<String> m_categories;
private Set<String> m_taskNames;
public Set<String> getCategories() {
return m_categories;
}
public void setCategories(Set<String> categories) {
this.m_categories = categories;
}
public Set<String> getTaskNames() {
return m_taskNames;
}
public void setTaskNames(Set<String> taskNames) {
this.m_taskNames = taskNames;
}
public static TestFilter fromString(String jsonRepresentation){
ObjectMapper mapper = new ObjectMapper();
TestFilter filter= null;
try {
filter = mapper.readValue(jsonRepresentation, TestFilter.class );
} catch (IOException e) {
throw new MyException("Exception while parsing the TestFilter");
}
return filter;
}
}
我在下面的休息服务中使用它
@GET
@Path("/schedule/info")
public Response getScheduledTasks(@QueryParam(FILTERS)TestFilter testFilter){
if(testFilter == null){
System.out.println("its null");
} else {
System.out.println("not null");
}
return Response.status(Status.OK).entity("Success").build();
}
我用来访问该对象的网址如下所示。网址被解码以便于阅读。
https://myip:port/my-context/rest/schedule/info?filters=&#34; {&#34;分类&#34;:[&#34; C&#34;&#34; d&#34],&#34; TASKNAME& #34;:[&#34; TASKA&#34;]}&#34;
我在服务上放了一个调试点,所以它点击了服务,但问题是testFilter总是变为空。
请告诉我代码的问题。
答案 0 :(得分:1)
"
中包含的JSON只是一个JSON字符串。 JSON对象不应该有引号。所以只需从引号中打开JSON
filters={"categories":["C","D"],"taskNames":["TaskA"]}
另一件事,根据您的意见。如果你想避免使用404 NotFound,如果你想把它改成400 Bad Request这样的东西,那么就把它扔掉吧
throw new BadRequestException()
// or new WebApplicationException(400)
对我来说奇怪的是,错误的查询参数会导致404,但这是JAX-RS的指定行为。就个人而言,我只是在这种情况下将其更改为400.