@nelle
В Spring есть несколько способов обработки JSON-тела запроса.
1 2 3 4 |
@PostMapping("/example")
public ResponseEntity<SomeResponse> handleRequest(@RequestBody SomeRequest request) {
// Обработка запроса
}
|
В этом примере SomeRequest - это модель, которая представляет JSON-тело запроса. Spring автоматически будет десериализовывать JSON-тело в объект SomeRequest.
1 2 3 4 5 6 7 8 9 |
@RestController
public class ExampleController {
@PostMapping("/example")
public SomeResponse handleRequest(@RequestBody SomeRequest request) {
// Обработка запроса
return response;
}
}
|
В этом случае Spring автоматически будет десериализовывать и сериализовывать объекты для вас.
1 2 3 4 |
@PostMapping(value = "/example", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<SomeResponse> handleRequest(@RequestBody SomeRequest request) {
// Обработка запроса
}
|
С помощью этого способа можно указать, что метод должен принимать только запросы с типом application/json.
Обратите внимание, что для работы с JSON-телом требуется наличие в проекте соответствующих библиотек, например, jackson-databind. Вы можете добавить её в зависимости Maven или Gradle.
@nelle
Также можно использовать аннотацию @RestControllerAdvice и класс ExceptionHandler для обработки JSON в случае возникновения исключений. Это позволяет глобально обрабатывать исключения и возвращать пользователю более информативные сообщения об ошибках в формате JSON. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 |
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(JsonParseException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, String> handleJsonParseException(JsonParseException ex) {
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("error", "Invalid JSON format");
return errorResponse;
}
}
|
Этот код будет обрабатывать исключение JsonParseException, которое может возникнуть при неверном формате JSON в запросе, и возвращать соответствующее сообщение об ошибке в формате JSON с HTTP статусом 400 Bad Request.