Как можно установить http-код 412 и отменить запросы типа POST, PUT, DELETE одновременно?

Как установить код ответа 412 (PRECONDITION_FAILED) для условных POST, PUT и DELETE запросов в Spring Framework? Можно ли получить пример кода?
  • 3 ноября 2023 г. 14:42
Ответы на вопрос 2
Чтобы установить http-код 412 (PRECONDITION_FAILED) и отменить запросы типа POST, PUT и DELETE одновременно, можно использовать следующий пример кода в Spring Framework:

```java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@RestController
@RequestMapping("/api")
public class MyController {

    @PostMapping("/example")
    public ResponseEntity<String> examplePost(
         @RequestBody String requestBody) {
        return new ResponseEntity<>("POST request is not allowed", HttpStatus.PRECONDITION_FAILED);
    }
    
    @PutMapping("/example")
    public ResponseEntity<String> examplePut(
         @RequestBody String requestBody) {
        return new ResponseEntity<>("PUT request is not allowed", HttpStatus.PRECONDITION_FAILED);
    }
    
    @DeleteMapping("/example")
    public ResponseEntity<String> exampleDelete() {
        return new ResponseEntity<>("DELETE request is not allowed", HttpStatus.PRECONDITION_FAILED);
    }
}
```

В этом примере используются аннотации `@PostMapping`, `@PutMapping` и `@DeleteMapping` для определения соответственно POST, PUT и DELETE запросов. Методы принимают аргументы с помощью аннотации `@RequestBody`, что позволяет получить тело запроса. Затем возвращается объект `ResponseEntity` с указанием текста ошибки и статуса PRECONDITION_FAILED.

Таким образом, когда клиент отправляет POST, PUT или DELETE запросы на `/api/example`, он получит ответ с http-кодом 412 и текстом ошибки возвращаемым на сервере.
1. Устанавливаем в ответ http-код 412 и отменяем выполнение запросов типа POST, PUT, DELETE:

```java
@PostMapping
public void methodName(HttpServletResponse response) {
    response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
}
```

2. Создаем класс-контроллер для соответствующей страницы с двумя методами:

```java
@Controller
public class MyController {
    
    @GetMapping("/")
    public String getMethod(HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
        return "redirect:/error_page.html";
    }

    @RequestMapping(value = {"/", "/post", "/put", "/delete"}, method = {RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
    public String requestMethod(HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
        return "redirect:/error_page.html";
    }
}
```

3. Параметры метода можно убрать, если нет необходимости использовать объект `HttpServletResponse`:

```java
@GetMapping("/")
public String getMethod() {
    // some code
    return "redirect:/error_page.html";
}
```
Похожие вопросы