Spring boot Rest API Тело запроса (POST) - PullRequest
0 голосов
/ 16 февраля 2020

Тело запроса имеет один параметр, например, int data. Где, как будто я передаю дополнительный параметр, которого нет в классе, он не выдает ошибку. Почему он может использовать данные, которые не являются частью тела запроса.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Используя RESTful API от многочисленных поставщиков на протяжении многих лет, позвольте мне дать вам представление о "пользователях".

Часто документация просто плоха или устарела. Возможно, имя параметра изменилось, возможно, вы указали точный регистр имен свойств, возможно, вы использовали неверный шрифт в своей документации.

Так что по умолчанию REST API не проверяет дополнительные атрибуты, не представленные в тело запроса; в противном случае проверяется, присутствуют ли предоставленные атрибуты или нет. если вы не хотите десериализовать собственность, которой нет; Вы можете добавить проверки следующим образом:

import java.io.Serializable;
import javax.validation.constraints.NotBlank;
public class DemoDto implements Serializable{

    private static final long serialVersionUID = 1L;

    private int id;

    @NotBlank(message = "name can't be empty.")
    private String name;

    //getters & setters
}

Контроллер:

import javax.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @PostMapping("/test")
    public ResponseEntity<DemoDto> test(@RequestBody  @Valid DemoDto demoDto){
        return ResponseEntity.ok(demoDto);
    }
}
0 голосов
/ 16 февраля 2020

По умолчанию Spring распознает только объявленные параметры запроса, остальные параметры игнорируются. Если вы хотите ограничить это. Вы можете сделать это

Add HttpServletRequest request in the method parameter
String params = request.getQueryString();

в теле метода для проверки параметров.

Но, на мой взгляд, более прагматичный c подход может заключаться в игнорировании неверных параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...