【发布时间】:2016-11-16 05:43:37
【问题描述】:
我有一个像下面这样的复杂对象
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();
}
我用于访问对象的 url 如下所示。为了便于阅读,对 url 进行了解码。
https://myip:port/my-context/rest/schedule/info?filters="{"categories":["C","D"],"taskName":["TaskA"]}"
我在服务上放了一个调试点,所以它会命中服务,但问题是 testFilter 总是为空。
请告诉我代码有什么问题。
【问题讨论】:
-
如果您从 URL 中的 JSON 中删除
"(仅外引号)会怎样? -
我怀疑正在发送的 json 结构。
m_categories可以在json中转换成categories吗?理想情况下,setter 和 getter 不会自动生成,而是您手动创建的?如果没有,您可以尝试以m_categories=C&m_categories=D&m_taskName=TaskA发送,会发生什么? -
@peeskillet 我收到如下异常“javax.ws.rs.NotFoundException: Unable to extract parameter from http request: javax.ws.rs.QueryParam(\"filters\") value is '{\"categories\":[\"C\",\"D\"],\"taskName\":[\"TaskA\"]}' 但这是由于任务名称拼写错误,它应该是任务名称。现在可以正常工作了。谢谢您可以将其添加为答案,以便我接受吗?
标签: java json rest jax-rs resteasy