
[英]WebApplicationException while fetching values from service in 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.