繁体   English   中英

从WebApplicationException返回JSON正文中的错误

[英]Return error in JSON body from webapplicationexception

我试图将我的错误消息放入WebApplicationException的正文中。 我在邮递员中获得了状态代码,但尸体仍然是空的。

我试图添加一个像这样的映射器

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class UnexpectedExceptionMapper implements ExceptionMapper<Exception> {
    private static final transient ObjectMapper MAPPER = new ObjectMapper();

    @Override
    public Response toResponse(final Exception exception) {
        ResponseBuilder builder = Response.status(Status.INTERNAL_SERVER_ERROR)
                .entity(defaultJSON(exception))
                .type(MediaType.APPLICATION_JSON);
        return builder.build();
    }

    private String defaultJSON(final Exception exception) {
        ErrorInfo errorInfo = new ErrorInfo(exception.getMessage(), exception.getMessage());

        try {
            return MAPPER.writeValueAsString(errorInfo);
        } catch (JsonProcessingException e) {
            return "{\"message\":\"An internal error occurred\"}";
        }
    }
}

但是邮差仍然告诉我,当我抛出错误时,身体仍然是空的。

throw new Exception("test")

有没有更好的方法,为什么它不起作用? 状态会更新,但不会传递带有信息的正文。

我之所以需要它,是因为我想传递从另一个呼叫端点收到的错误。

编辑:我也在尝试一个简单的响应版本,但当我引发错误时,该实体也将被忽略

  Response.status(Response.Status.UNAUTHORIZED).entity("Does not work").build();
  Response.status(Response.Status.SEE_OTHER).entity("Does work").build();

我把它像这样扔给测试atm。

 @POST
    @Path("/place/actionid/{nr}")
    @Produces("application/json")
    public Response getActionIdForPlaceAssetOrder(@PathParam("nr") @Valid String nr, @Valid Body body) throws Exception {
        Response response = Response.status(Response.Status.UNAUTHORIZED).entity("Some message here").build();

        return response;

上面的代码抛出状态,但忽略该消息。 就像我说的那样,任何错误消息都会被忽略。 这可能是一个码头问题吗? 此刻,如果我能将任何消息传递给邮递员,我将很高兴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM