我正在尝试将错误消息放入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版本 但是当我抛出错误时,实体也会被忽略
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;
上面的代码引发状态,但忽略该消息。就像我说的那样,任何错误消息都会被忽略。这可能是码头问题吗? 此刻,如果我能将任何消息传递给邮递员,我都会很高兴。