У меня есть restcontroller со следующим кодом
@RequestMapping(method = RequestMethod.POST, value = "/student")
public void addTopic(@RequestBody Student student) {
student.setPassword(bCryptPasswordEncoder.encode(student.getPassword()));
studentService.addStudent(student);
}
но если данные json не соответствуют объекту Student или имеют неправильный формат, создается исключение com.fasterxml.jackson.core.JsonParseException: Unexpected character ('"' (code 34)).
как лучше всего предотвратить это
да, для моего веб-приложения это правда, но как насчет людей, использующих другие инструменты и отправляющих неправильные данные. Я хочу проверить данные и отправить и отправить ответ, если он неправильно отформатирован json
Возможный дубликат Обработка исключений службы Spring Boot REST

Для этого используйте Spring ExceptionHandler
Вы можете указать ExceptionHandler на основе типов исключений, а также применить коды ошибок, которые вы хотите использовать.
@ExceptionHandler(JsonParseException.class)
public JacksonExceptionHandler {
public ResponseEntity<String> handleError(final Exception exception) {
HttpStatus status = HttpStatus.BAD_REQUEST;
if (exception != null) {
LOGGER.warn("Responding with status code {} and exception message {}", status, exception.getMessage());
return new ResponseEntity<>(exception.getMessage(), status);
}
}
Кроме того, вы можете использовать javax.validation для проверки полученного объекта, а затем Spring Boot автоматически выполнит всю проверку. Просто добавьте в тело @Valid.
Я обнаружил, что мне нужно поймать JsonProcessingException (от которого идет JsonParseException) в @ExceptionHandler, а не в JsonParseException.
@ControllerAdvice
public class FeatureToggleControllerAdvice {
@ExceptionHandler(JsonProcessingException.class)
public ResponseEntity<JSONAPIDocument> handleJsonParseException(JsonProcessingException ex) {
final Error error = new Error();
error.setId(UUID.randomUUID().toString());
error.setStatus(HttpStatus.BAD_REQUEST.toString());
error.setTitle(ex.getMessage());
return new ResponseEntity<>(JSONAPIDocument
.createErrorDocument(Collections.singleton(error)), HttpStatus.NOT_FOUND);
}
}
Используя JsonParseException в приведенном выше примере, ничего не обнаружено, но использование JsonProcessingException работает должным образом.
«как лучше всего предотвратить это» Отправить правильный формат JSON.