Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSON中的Restlet错误响应格式_Java_Json_Restlet - Fatal编程技术网

Java JSON中的Restlet错误响应格式

Java JSON中的Restlet错误响应格式,java,json,restlet,Java,Json,Restlet,我正在使用这个框架来管理一个项目API。默认情况下,错误响应的格式似乎是HTML。我如何更改它,以便默认情况下所有错误响应都是JSON格式的 我曾尝试添加一个自定义转换器,它对实体响应非常有效,但对错误响应却没有效果 我们有110多个端点支持application/json,因此理想情况下,我只想将默认错误设置为始终作为json返回。默认转换器适用于返回实际实体的所有方法 @Get("json") @Produces("application/json") public User represe

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

我曾尝试添加一个自定义转换器,它对实体响应非常有效,但对错误响应却没有效果

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

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

但是这个方法抛出的
ResourceException
返回HTML

如果您确定您的服务将产生的格式,那么您可以在类级别用@products注释您的服务类。这样就不需要为每个方法定义相同的

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

请尝试下面的代码

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();
}

并为异常消息提供以下模型类

@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;
    }

}

这似乎不起作用。异常仍然是HTML格式。服务器端异常始终是HTML格式。若您需要为异常发送JSON消息,那个么您需要在您的方法中处理异常,然后在catch块中创建您自己的JSON字符串并将其发送给客户机。这是行不通的。它只是将JSON错误包装成HTML错误。您是基于实际的Restlet知识还是基于通用WS实现?一个专门用于WS-API的框架没有一个内置的机制来控制错误响应格式,这似乎有些奇怪。我曾经尝试过简化实现,是的,它是基于通用WS-API实现的。有关详细信息,请参见。在任何情况下,我们都必须创建异常处理类。