使用 rest easy 的 rest 服务问题
Issue with rest Service using rest easy
我有一个像下面这样的复杂对象
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 就像 below.The url 被解码以便于阅读。
https://myip:port/my-context/rest/schedule/info?filters="{"categories":["C","D"],"taskName":["TaskA"] }"
我在服务上放置了一个调试点,所以它命中了服务,但问题是 testFilter 始终为空。
请告诉我代码有什么问题。
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。
我有一个像下面这样的复杂对象
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 就像 below.The url 被解码以便于阅读。
https://myip:port/my-context/rest/schedule/info?filters="{"categories":["C","D"],"taskName":["TaskA"] }"
我在服务上放置了一个调试点,所以它命中了服务,但问题是 testFilter 始终为空。
请告诉我代码有什么问题。
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。