Как изменить коды состояния http с обработкой исключений - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь присвоить значение контроллеру с указанным идентификатором, который еще не существует. Обычно он должен возвращать 404, но он возвращает 500. Как я могу преобразовать в 404? Я пытаюсь с, если еще, но это не работает.

@PutMapping("/api/cricketer/{id}")
public ResponseEntity<Cricketer> updateCricketer(@PathVariable("id") Long id, @RequestBody @Valid Cricketer cricketer) {

    Cricketer cCricketer=cricketerService.findById(id);
    cCricketer.setId(id);
    cCricketer.setCountry(cricketer.getCountry());
    cCricketer.setName(cricketer.getName());
    cCricketer.setHighestScore(cricketer.getHighestScore());
    cricketerRepository.save(cCricketer);
    if (cCricketer.getId()!=null){
        return new ResponseEntity<Cricketer>(cCricketer,HttpStatus.OK);
    }
    else {
        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
    }
}

1 Ответ

2 голосов
/ 04 июля 2019

Пара вариантов.


Пусть CricketerService сгенерирует Exception (вероятно, специфичный для домена CricketerNotFoundException или что-то подобное) в методе findById и добавит @ExceptionHandlerдля этого.

@ExceptionHandler(CricketerNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
private void handleCricketerNotFoundException(final CricketerNotFoundException cnfEx) {
    // Log, do anything else...
}

(Вы также можете добавить @ResponseStatus к самому классу CricketerNotFoundException.)


Иметь CricketerService.findById вернуть null, если это возможно 'найти его и обработать в этом случае:

public ResponseEntity<Cricketer> updateCricketer(
        @PathVariable("id") Long id, 
        @RequestBody @Valid Cricketer cricketer) {

    @Nullable Cricketer cCricketer=cricketerService.findById(id);

    if (cricketer == null) {
        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
    }

    cCricketer.setId(id);
    cCricketer.setCountry(cricketer.getCountry());
    cCricketer.setName(cricketer.getName());
    cCricketer.setHighestScore(cricketer.getHighestScore());
    cricketerRepository.save(cCricketer);

    return new ResponseEntity<Cricketer>(cCricketer, HttpStatus.OK);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...