Java RESTWebServices中的错误消息

Java RESTWebServices中的错误消息,java,rest,jakarta-ee,Java,Rest,Jakarta Ee,我使用AJAX从JSP调用RESTWebServices。您能告诉我从REST Web服务向JSP发送自定义错误消息的最佳方法吗?考虑使用HTTP响应代码和(可能)json响应体来提供任何所需信息,以便客户端应用程序能够做出相应的反应。如果您使用的是JAX-RS REST Web服务,您可以配置Spring@Controller。您的方法应该生成application/json并返回Response对象,如下例所示: @GET @Path("/get/{id}") @Produces(Media

我使用AJAX从JSP调用RESTWebServices。您能告诉我从REST Web服务向JSP发送自定义错误消息的最佳方法吗?

考虑使用HTTP响应代码和(可能)json响应体来提供任何所需信息,以便客户端应用程序能够做出相应的反应。

如果您使用的是JAX-RS REST Web服务,您可以配置Spring
@Controller
。您的方法应该生成
application/json
并返回
Response
对象,如下例所示:

@GET
@Path("/get/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserById(@PathParam("id") String userId) {

        // Here your logic

        Foo foo = new Foo();
        foo.setMsg("Bad Request");
        foo.setData("User " + userId + " not found")

        return Response.status(400).entity(foo).build();
    }
通过AJAX,您可以捕获错误消息

// Get user details
$.getJSON(encodeURI("./rest/user/get/" + userId), function(data) {

    // Some logic on success

    // Fail
}).fail( function(jqxhr) {
    console.log(jqxhr.responseJSON.msg);
});

考虑使用。您可以为它提供错误代码(也可以是自定义代码)和响应的主体。如果您有一个复杂的结构来显示错误,您可以使用JSON格式,但我建议只使用一条errormessage(例如,在一个错误的请求中,请求的哪一部分是错误的)。

有两种方法。 1.您可以查看从web服务收到的响应状态。以2**开头的状态为成功响应(例如:200201),以4**或5**开头的状态为错误

  • 但是处理和跟踪异常的最佳方法是使用ExceptionMapper。您可以编写自己的类来实现ExceptionMapper,如下所示:

    @Provider
    public class GenericExceptionMapper implements ExceptionMapper<Throwable> {
    
     @Override
     public Response toResponse(Throwable arg0) {
    
    return Response.status(Status.INTERNAL_SERVER_ERROR)
            .entity("Custom Exception: Error retrieving data")
            .build();
    }
    
    }
    
    @Provider
    公共类GenericeExceptionMapper实现ExceptionMapper{
    @凌驾
    公众响应(可丢弃arg0){
    返回Response.status(status.INTERNAL\u SERVER\u错误)
    .entity(“自定义异常:检索数据时出错”)
    .build();
    }
    }
    
  • 您可以像下面这样编写自己的自定义异常,也可以像下面这样抛出一揽子异常。不过,上述方法是首选方法

     @Provider
     public class GenericExceptionMapper implements ExceptionMapper<Throwable> {
    
    @Override
    public Response toResponse(Throwable arg0) {
    
        return Response.status(Status.INTERNAL_SERVER_ERROR)
                .entity("Custom Exception: Error retrieving data")
                .build();
    }
    
    }
    
    @Provider
    公共类GenericeExceptionMapper实现ExceptionMapper{
    @凌驾
    公众响应(可丢弃arg0){
    返回Response.status(status.INTERNAL\u SERVER\u错误)
    .entity(“自定义异常:检索数据时出错”)
    .build();
    }
    }
    
    没有任何代码,我们如何判断解决方案?答案取决于您使用的techstack 1)我问的是异常映射器,使用异常映射器是正确的方法吗?1)我问的是异常映射器,使用异常映射器是正确的方法吗,当操作不受您控制时(如对象类型、权限、语法),会引发异常。但是对于REST服务,您需要手动验证输入数据并返回“警告”消息,如错误的数字、字符串、值。。。我只使用异常映射器登录请求期间发生的服务器错误…1)我在询问异常映射器,使用异常映射器是正确的方法吗?