使用 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。