休息问题使用休息轻松

时间:2016-11-16 05:43:37

标签: java json rest jax-rs resteasy

我有一个复杂的对象,如下面的

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总是变为空。

请告诉我代码的问题。

1 个答案:

答案 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.