Как вернуть строку в ответ, которая имеет @Produces (MediaType.APPLICATION_JSON)? - PullRequest
0 голосов
/ 10 мая 2018
@GET
@Path("/paises/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response findCuntryList(@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.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

почему вы не заинтересованы в использовании выражения 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 голосов
/ 10 мая 2018

Из предоставленного вами примера кода и тегов для этого вопроса вам, вероятно, лучше использовать обработчик исключений, а не перехватывать и возвращать сообщение, созданное вручную, и разрешать методу @GET возвращать объект вашего домена.Библиотека JAX-RS (в данном случае Джерси?) Будет сериализовать ее в JSON, поскольку ваш метод аннотирован с помощью APPLICATION_JSON.

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

Специально для Джерси: https://howtodoinjava.com/jersey/jax-rs-jersey-custom-exceptions-handling-with-exceptionmapper/

0 голосов
/ 10 мая 2018

Одна строка в кавычках является допустимым 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 .

...