如何创建有意义的REST响应消息?

tar*_*rka 3 rest get jersey

我创建了一个REST服务,我想知道将有意义的消息发送到GET请求的最佳做法是什么.基本上我的GET请求返回一个特定的对象,就像这样;

@GET
@Path("/examsple")
@Produces(MediaType.APPLICATION_JSON)
public List<SomeObject> retrieveSomeObjs() {

    List<SomeObject> result = new ArrayList<>();
    try {
        result = ... Get SomeObjects ...;
    } catch (Exception e) {
        ... Deal with exception ...
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这很有效,除非出现错误,响应只会发回一个空列表!更有用的是解释问题所在的信息.但是我无法发回String消息,因为返回类型是List!

我目前的解决方案是将返回类型更改为Map,然后我可以返回包含在Map中的对象以及任何消息.然而,它在客户端有点混乱,我想知道是否有内置解决方案或"接受"的解决方案.

Kev*_*don 5

如果客户端出错,则使用HTTP响应代码.如果找不到某个项目,那么您的回复将是404 Not Found.如果用户没有访问对象的权限,则返回a 403 Forbidden.目前你正在回答一个200 OK说法,一切都没问题.

如果在服务器端出现错误,您实际上并不想将该信息发送给您的客户.在服务器上捕获错误并使用它做一些有意义的事情(比如记录它),这样你就可以更改代码,这样就不会再发生了.