1

我已com.sun.jersey.api.json.POJOMappingFeature设置为 true,它适用于 HTTP 200 响应。

但是,当我的应用程序返回错误时,它会显示带有错误标题的 text/html 响应。

即使我像这样创建自定义异常(在 ContainerRequestFilter 中):

throw new WebApplicationException(
    Response.status(Response.Status.FORBIDDEN)
      .type(MediaType.APPLICATION_JSON)
      .build()
);

它仍然显示通用文本/html 403 错误。

4

1 回答 1

2

你应该试试 Jersey 的 ExceptionMapper:

首先,您的自定义例外:

public class UnauthorizedException extends RuntimeException {
   public UnauthorizedException() {}
}

然后,您的实体,您要发回:

@XmlRootElement
public class ErrorMessage{
  @XmlElement
  private String message;

  public ErrorMessage(String message){
    this.message = message;
  }
}

最后,魔术开始了:)

@Provider
public class UnauthorizedExceptionMapper implements ExceptionMapper<UnauthorizedException>{

  @Override
  public Response toResponse(UnauthorizedException exception) {
    return Response.status(Response.Status.UNAUTHORIZED)
                   .entity(new ErrorMessage("Not Authorized"))
                   .build();
   }
 }

现在,当您返回一个 JSON-Entity

throw new UnauthorizedException();

问候

于 2013-05-01T06:39:07.557 回答