diff --git a/src/main/java/org/lanit/controllers/JSONController.java b/src/main/java/org/lanit/controllers/JSONController.java index 8cd42b3..b6d2f3a 100644 --- a/src/main/java/org/lanit/controllers/JSONController.java +++ b/src/main/java/org/lanit/controllers/JSONController.java @@ -24,13 +24,19 @@ public class JSONController { this.objectMapper = objectMapper; } - // ЕДИНЫЙ метод для всех JSON ответов + + //Метод для создания JSON ответов с чистым Content-Type + private ResponseEntity createJsonResponse(Object body, HttpStatus status) { return ResponseEntity.status(status) - .header("Content-Type", "application/json") // Без charset! + .header("Content-Type", "application/json") .body(body); } + /** + * Основной endpoint для обработки JSON запросов + * @ResponseBody указывает, что возвращаемое значение должно быть записано в тело ответа + */ @PostMapping(value = "/json", produces = "application/json", consumes = "application/json") @ResponseBody public ResponseEntity handleJsonRequest( @@ -38,14 +44,15 @@ public class JSONController { @RequestBody String jsonBody) throws IOException { try { + // Обработка действий ADD и DELETE if ("add".equals(action)) { AddRequest addRequest = objectMapper.readValue(jsonBody, AddRequest.class); Info modifiedInfo = processingService.processAdd(addRequest); Response response = new Response(); response.setInfo(modifiedInfo); - response.setUuid(addRequest.getUuid()); - response.setLastUpdate(Instant.now().toString()); + response.setUuid(addRequest.getUuid()); // Сохраняем исходный UUID + response.setLastUpdate(Instant.now().toString()); // Обновляем время ответа return createJsonResponse(response, HttpStatus.OK); } else if ("delete".equals(action)) { @@ -56,28 +63,31 @@ public class JSONController { response.setInfo(modifiedInfo); response.setUuid(deleteRequest.getUuid()); response.setLastUpdate(Instant.now().toString()); - return createJsonResponse(response, HttpStatus.OK); // Используем createJsonResponse + return createJsonResponse(response, HttpStatus.OK); } else { + // Обработка неизвестных действий ErrorResponse error = new ErrorResponse(); error.setStatus("error"); error.setMessage("Передан некорректный action - " + action); - return createJsonResponse(error, HttpStatus.BAD_REQUEST); // Используем createJsonResponse + return createJsonResponse(error, HttpStatus.BAD_REQUEST); } } catch (RuntimeException e) { ErrorResponse error = new ErrorResponse(); error.setStatus("error"); error.setMessage(e.getMessage()); + // Определяем HTTP статус на основе текста ошибки HttpStatus status = e.getMessage().contains("тикер") || e.getMessage().contains("индекс") ? HttpStatus.NOT_FOUND : HttpStatus.BAD_REQUEST; - return createJsonResponse(error, status); // Используем createJsonResponse + return createJsonResponse(error, status); } catch (IOException e) { + // Обработка ошибок парсинга JSON ErrorResponse error = new ErrorResponse(); error.setStatus("error"); error.setMessage("Ошибка разбора JSON"); - return createJsonResponse(error, HttpStatus.BAD_REQUEST); // Исправил на BAD_REQUEST + return createJsonResponse(error, HttpStatus.BAD_REQUEST); } } } \ No newline at end of file