如何返回具有 @Produces(MediaType.APPLICATION_JSON) 的响应字符串?

问题描述 投票:0回答:3
@GET
@Path("/paises/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response findCountryList(@PathParam("id")int id){
    try{
    ArrayList<Country> lista = new ArrayList<>();
    for(int i=0; i<10 ;i++){
        Country c = new Country();
        c.setId(i);
        c.setName("country"+i);
        c.setCode("countryIsoCode"+i);
        c.setRegion("region"+i);
        lista.add(c);
        }
    
    Country co = lista.stream().filter(x -> x.getId()==id).findAny().get();
    if(id > lista.size()-1) throw new Exception("That id is not correct");
    return Response.ok(co).build();
    }catch(Exception e){
        
        return Response.status(404).entity(e.getMessage()).build();
        }
    }

当我没有异常时,我想返回一个 json,但是当我有异常时,我需要返回一个带有异常消息的字符串,但是 json 解析出现了这个错误。

java json maven jersey grizzly
3个回答
2
投票

单引号字符串是有效的 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


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

0
投票

根据您提供的示例代码和此问题的标签,您可能最好使用异常处理程序,而不是捕获并返回手工制作的消息,并让您的

@GET
方法返回域对象。 JAX-RS 库(在本例中是泽西岛?)会将其序列化为 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/

© www.soinside.com 2019 - 2024. All rights reserved.