【问题标题】:Dynamic result after error (List or Object)错误后的动态结果(列表或对象)
【发布时间】:2016-12-05 12:07:09
【问题描述】:

这是我的第一个问题,我研究过但没有找到答案...

我目前正在使用 Resteasy 开发一个 REST Web 服务。它工作正常,但我开始怀疑:有办法返回 List OR a Object 吗?

让我举例说明:我有一个方法可以返回一个扇区列表,在传递一个身份验证令牌后调用该列表。 如果令牌正常 - 它应该返回扇区列表。 如果令牌不正确 - 它应该返回一个错误,该错误被映射到一个名为 ErroGenerico 的类,它是一个 OBJECT。

我该怎么做?返回对象还是列表?

【问题讨论】:

  • 将该对象设为异常并在调用代码中捕获它
  • 好吧,如果你有异常,你可以使用结果代码并返回对象。在客户端,根据代码,您将知道您是否收到了ListException
  • 在可以通过其他方式完成的情况下,您不应该抛出异常。因为异常必须在无法处理的情况下使用
  • 感谢您的帮助。

标签: java web-services rest resteasy


【解决方案1】:

创建一个自定义异常ErroGenerico,如果令牌未验证,则抛出它。

所以,方法:

public List<Something> getList(String token) throw ErroGenerico {
// do stuff
}

【讨论】:

    【解决方案2】:

    你可以尝试如下

    //Not mandatory to create ListUser you can do without it oo just use arraylist directly
    class ListUser extends ArrayList<User> {}
    

    网络服务方法

    @GET
    @Path("getObj/{param}") 
    @Produces("application/json")
    public Response getObj(@PathParam("param") String msg) {
    
        ListUser responses = new ListUser();
        responses.add(new User("1"));
        responses.add(new User("2"));
        responses.add(new User("3")); 
        if("list".equals(msg))
            return Response.status(200).entity(responses).build();
        User u=new User();
        u.setName("Developer");
        return Response.status(200).entity(u).build();
    
    
    }
    

    客户端代码

    Client client = ClientBuilder.newClient();
        {
            String url = "http://jerseyexample-ravikant.rhcloud.com/rest/jws/getObj/list";
            System.out.println(url);
            Response response = client.target(url).request().get();
            ObjectMapper ob = new ObjectMapper();
    
            Object pojos = response.readEntity(Object.class);
            System.out.println(pojos.getClass());
             if(pojos instanceof java.util.ArrayList){
                ArrayList<User> list =  (ArrayList) pojos;
    
                for (Object pojo : list) {
                    User user = ob.convertValue(pojo, User.class);
                    System.out.println(user.getName());
                }
            }else{
                System.out.println("user");
                User user = ob.convertValue(pojos, User.class);
            }
            //System.out.println(response);
    
        }
    

    您可以在http://jerseyexample-ravikant.rhcloud.com/rest/jws/getObj/list查看工作服务

    在这里,您可以传递任何其他内容来获取对象,而不是传递列表

    除了这个答案,我还找到了这篇文章,它运行良好。

    resteasy response

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-05
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 2012-01-28
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多