Как вернуть сообщение об ошибке из метода, который в противном случае возвращает коллекцию - PullRequest
0 голосов
/ 08 января 2019

Это скорее концептуальная вещь. Мой метод должен вернуть список Conferences. Но если есть ошибка, я просто хочу, чтобы он отправил ответ String или, возможно, ответ JSON, например {err: 'Some error'} .Offcourse, следующий метод выдает ошибку компилятора для этой строки - return e.getMessage();. Как этого добиться?

@RequestMapping(value = "/api/allconf", method = RequestMethod.GET)
public List<Conferences> getAllConf(@RequestBody Conferences conf) {
    List<Conferences> allConf = new ArrayList<Conferences>();
    try {
        allConf.addAll(confRepository.findAll());
    } catch(Exception e){
        return e.getMessage();
    }
    return allConf;
}

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Есть один вариант:

Лучшее решение это исключение:

@RequestMapping(value = "/api/allconf", method = RequestMethod.GET)
public List<Conferences> getAllConf(@RequestBody Conferences conf) {
    List<Conferences> allConf = new ArrayList<Conferences>();
    try {
        allConf.addAll(confRepository.findAll());
    } catch(Exception e){
        throw new IllegalArgumentException(e.getMessage()); 
    }
    return allConf;
}    

И создайте обработчик ошибок для обработки исключения и способ его отображения:

@ControllerAdvice
public class CustomErrorHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    public void handlerIllegalArgumentException(IllegalArgumentException exception, ServletWebRequest webRequest) throws IOException {
        webRequest.getResponse().sendError(HttpStatus.BAD_REQUEST.value(), exception.getMessage());
    }
}     
0 голосов
/ 08 января 2019

e.getMessage () возвращает строку, а метод you является списком конференций, используйте новый общий класс ответа, такой как

public class Response {

   private Object content;

   private String error;

   // getters and setters

}

и измените свой метод

@RequestMapping(value = "/api/allconf", method = RequestMethod.GET)
    public Response getAllConf(@RequestBody Conferences conf) {

        Response resp = new Response();
        List<Conferences> allConf = new ArrayList<Conferences>();
        try{
            allConf.addAll(confRepository.findAll());
            resp.setContent(allConf);
        }catch(Exception e){
           resp.setError(e.getMessage());
        }
        return resp;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...