【发布时间】:2015-02-20 05:31:28
【问题描述】:
我正在编写一个 Restful Webservice Impl,我通过注释 @Produces("application/json") 以 JSON 格式消费和产生响应。我也在产生 JSON 响应。这里正在处理具有错误代码和错误消息的类的异常。当出现异常时,它不会以application/json 格式生成。我使用ExceptionMapper 找到了解决方案,但它是`text/plain 格式。
sn-p
public Class Confiuration{
@Path("getData")
@Consumes("application/json")
@Produces("application/json")
public JSONGetDataResponseVo getData(GetDataRequestVo datarequestVO)
throws FaultResponse {
JSONGetDataResponseVo response=new JSONGetDataResponseVo ();
DataServiceValidator.validateGetConfigurationAndDataRequest(datarequestVO);
....
....
}catch(ApplicationException applicationException){
throw new FaultResponse(applicationException,locale);
}
}
故障响应映射器
@Provider
public class FaultResponseMapper implements ExceptionMapper<FaultResponse> {
@Context
private HttpHeaders headers;
public Response toResponse(FaultResponse faultResponse) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(faultResponse).type(MediaType.APPLICATION_JSON).build();
}
}
应用程序异常
public abstract class ApplicationException extends Exception{
private java.lang.String errorCode;
public ApplicationException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public ApplicationException(String message) {
super(message);
}
public java.lang.String getErrorCode() {
return this.errorCode;
}
public abstract String getLocaleMessage(Locale locale);
}
故障响应
public class FaultResponse extends WebApplicationException {
private String errorCode;
private String errorMessage;
private String localErrorMessage;
public FaultResponse(String errorCode, String errorMessage,
String localErrorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
this.localErrorMessage = localErrorMessage;
}
public FaultResponse(ApplicationException applicationException,
Locale locale) {
this.errorCode = applicationException.getErrorCode();
this.errorMessage = applicationException.getMessage();
if (locale != null
&& applicationException.getLocaleMessage(locale) != null) {
this.localErrorMessage = applicationException
.getLocaleMessage(locale);
} else {
this.localErrorMessage = applicationException.getMessage();
}
}
}
那么我怎样才能以 JSON 格式生成我的 faultResponse。
【问题讨论】:
-
这看起来很奇怪。
FaultResonse是例外吗?我的意思是我猜这是因为你正在扔它,但这似乎很奇怪,特别是因为你也将它作为响应发送。如果您要映射ApplicationException,它似乎更正确。您可能想要显示ApplicationException类以及FaultResponse类以获得更好的帮助。 -
您是否检查过映射器是否被调用?我猜想正在使用另一个映射器,或者异常正在冒泡到容器中。需要更完整的信息来测试
-
应用程序异常是我的抽象类,它将被我使用的每个异常类扩展。在 sn-p 中更新应用程序异常
-
FaultResponse呢? -
另外,您使用的是什么 JAX-RS 或(服务器)实现?
标签: json rest exception jax-rs