如何在响应中返回一个包含@Produces(MediaType.APPLICATION_JSON)的字符串?

时间:2018-05-10 09:21:05

标签: java json maven jersey grizzly

$.get('/get/breeds/' + specie, { query: query }, function(data) {
    console.log(data);
});

当我没有Exception时,我想返回一个json,但是当我拥有它时,我需要返回一个带有异常消息的字符串,但这个json解析的丢弃错误。

3 个答案:

答案 0 :(得分:1)

单引号字符串是有效的JSON。所以你可以使用:

return Response.status(404).entity("\"" + e.getMessage() + "\"").build();

但是我建议你改为返回一个JSON对象。它使您可以灵活地返回有关错误的额外元数据。

您可以使用Map<String, Object>

Map<String, Object> errorDetails = new HashMap<>();
errorDetails.put("message", e.getMessage());
return Response.status(404).entity(errorDetails).build();

或者为错误详细信息创建一个类:

public class ErrorDetails {

    private String message;

    ...
}
ErrorDetails errorDetails = new ErrorDetails;
errorDetails.setMessage(e.getMessage());
return Response.status(404).entity(errorDetails).build();

要报告HTTP API中的问题,请查看RFC 7807

答案 1 :(得分:0)

为什么你不想使用WILDCARD表达式,

 @Path("getSupportEmail/{broadcastMprId}")
    @GET
    @Produces(MediaType.MEDIA_TYPE_WILDCARD)
    public Response getSupportEmailByBroadcastMprId(@PathParam("broadcastMprId") Integer broadcastMprId) {
        return Response.ok(broadcastMprBean.getSupportEmailByBroadcastMprId(broadcastMprId)).build();
    }

答案 2 :(得分:0)

从您提供的示例代码和此问题的标记中,最好使用Exception处理程序而不是捕获并返回手工制作的消息,并让@GET方法返回您的域对象。 JAX-RS库(本例中为Jersey?)将序列化为JSON,因为您的方法是使用APPLICATION_JSON注释的。

https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-en/cn/part1/chapter7/exception_handling.html

对泽西岛来说:https://howtodoinjava.com/jersey/jax-rs-jersey-custom-exceptions-handling-with-exceptionmapper/