Как можно настроить свой собственный ответ в методе API на случай возникновения ошибки 400?

Добрый день! <br/> Прошу помочь разобраться с вопросом. <br/> <br/> В контроллере: <br/> <pre><code class="java">@GetMapping("getproject2/{id}")
    public ResponseEntity&lt;ProjectDTOmain&gt; getProjectByIds1(@PathVariable int id) {
        ProjectDTOmain project = projectService.getProjectById(id);
        if (project == null) { // Проверка на наличие проекта
            return ResponseEntity.badRequest().build(); // Возвращаем статус 400
        }
        return ResponseEntity.ok(project); // Возвращаем проект с кодом 200
    } // запросить проект, возвращает код 400 если не верные данные на запросе</code></pre> <br/> <br/> В сервисе: <br/> <pre><code class="java">public ProjectDTOmain getProjectById(int id){
        if (projectRepo.findProjectByID(id) == null){
            return null;
        }
        return ProjectMapper.toProjectDTOmain(projectRepo.findProjectByID(id));
    }</code></pre> <br/> <br/> В настоящее время, если запрос сделать с несуществующим ID, возвращается пустое тело и код 400. <br/> Как можно добавить в возвращаемое тело кастомное сообщение, например: <br/> { <br/> "error": "не верный id" <br/> }
  • 27 января 2025 г. 17:44
Ответы на вопрос 1
Чтобы настроить свой собственный ответ для ошибки 400 с кастомным сообщением в вашем API-контроллере, вы можете создать объект, который будет содержать это сообщение, и вернуть его вместе с статусом 400. Ниже приведён пример, как это можно сделать.

1. Создайте класс для представления вашего сообщения об ошибке. Это может быть простой класс с одним полем для сообщения.

```java
public class ErrorResponse {
    private String error;

    public ErrorResponse(String error) {
        this.error = error;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }
}
```

2. Измените ваш контроллер, чтобы возвращать объект `ErrorResponse` вместо пустого ответа при ошибке 400:

```java
@GetMapping("getproject2/{id}")
public ResponseEntity<?> getProjectByIds1(@PathVariable int id) {
    ProjectDTOmain project = projectService.getProjectById(id);
    if (project == null) { // Проверка на наличие проекта
        ErrorResponse errorResponse = new ErrorResponse("не верный id");
        return ResponseEntity.badRequest().body(errorResponse); // Возвращаем статус 400 с сообщением об ошибке
    }
    return ResponseEntity.ok(project); // Возвращаем проект с кодом 200
}
```

Теперь, если вы выполните запрос с несуществующим ID, вы получите ответ со статусом 400 и телом, содержащим:

```json
{
    "error": "не верный id"
}
```

Таким образом, вы сможете предоставлять более информативные ответы на ошибки в вашем API.
Похожие вопросы