JSON中的Restlet错误响应格式

时间:2017-04-29 06:38:54

标签: java json restlet

我使用restlet框架来管理项目API。默认情况下,错误响应似乎是以HTML格式化的。如何更改,以便默认情况下所有错误响应都是JSON格式?

我尝试添加自定义转换器,该转换器非常适合实体响应但不适用于错误响应。

我们有110多个支持application/json的端点,所以理想情况下我想将默认错误设置为始终返回为JSON。默认转换器适用于返回实际实体的所有方法。

@Get("json")
@Produces("application/json")
public User represent() {
    ...
    return result;
}

但是此方法抛出的ResourceException返回HTML。

1 个答案:

答案 0 :(得分:0)

如果您确定服务的格式,那么您可以在类级别使用 @Produces 注释来注释您的服务类。然后,您不需要为每个方法定义相同的内容。

此外,一旦 @Produces 在类级别定义,并且您想要更改特定方法的响应格式,那么您可以为其他格式注释该特定方法。

尝试以下代码..

public Response represent(){
try{

}catch(Exception ex){
    return Response.status(500)
            .entity(new ExceptionMessage("500", ex.getMessage()))
            .type(MediaType.APPLICATION_JSON).
            build();
}
return Response.status(Response.Status.OK).entity(result).build();

}

并且在异常消息下面有Model类。

@XmlRootElement
class ExceptionMessage{
    private String statusCode;
    private String errorMessage;

    public ExceptionMessage() {
    }

    public ExceptionMessage(String statusCode, String errorMessage) {
        this.statusCode = statusCode;
        this.errorMessage = errorMessage;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public String getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }

}

This is the link dedicated to Restlet.