如何从Jersey @POST方法向客户端AJAX发送消息?

时间:2013-06-24 14:39:04

标签: post jersey

我有以下Java方法注释为Jersey @POST来处理表单提交:

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("created")
public Response createCustomer(@FormParam("username") String username,
        @FormParam("name") String name, @FormParam("dob") Date dob)
        throws ServletException, IOException {
    URI uri = URI.create(uriInfo.getPath());
    Response r;
    Integer id;

    try {
        id = dbController.create(username, name, dob); // This may throw exception.
        r = Response.created(uri).build();


    } catch (DataAccessException ex) {
        String errMsg = ex.getMessage();
        // To do: how to send error message to AJAX so that client-side can see the error message?

    }

    return r;
}

表单提交后,如果有一些错误,我希望客户端用户看到从后端REST服务发送的错误消息。如何编写代码以便从后端向前端发送消息?

3 个答案:

答案 0 :(得分:1)

添加类似

的内容
return Response.status(400).entity(ex.getMessage()).build();

或当然

r = Response.status(400).entity(ex.getMessage()).build();

到你的catch区块。 (状态代码取决于你想说的话。)

答案 1 :(得分:1)

您可以返回如下错误代码:

return Response.status(Status.FORBIDDEN).entity(ex.getMessage()).build();

答案 2 :(得分:1)

您可以将响应包装在您自己的对象中,如下所示:

public class MyResponse {
    private boolean success = true;
    private String exMessage;
    private Object data;
    ...
}

然后,您只需将要序列化的数据添加到Json作为MyResponse.setData()。如果失败,则将success设置为false并设置exMessage。只需创建一个自己的信封,就可以将所需的任何信息附加到您要发送的数据中。

编辑:与选定的答案相比,这不会让你在出错时解析不同的方式。