#java #json #spring-boot #http-post #jackson-databind
#java #json #spring-boot #http-post #jackson-databind
Вопрос:
У меня есть следующий обработчик метода post:
@PostMapping("/endpoint")
public int myEndpoint(@RequestBody MyBody body) {
return body.foo;
}
Который принимает следующее тело запроса:
class MyBody {
private int foo;
public MyBody() {}
public MyBody(foo) {
this.foo = foo;
}
public getFoo() {
return this.foo;
}
}
Теперь я ожидаю, что когда я отправлю запрос на /endpoint
с телом {}
, он вернет статус 400,
но я получаю 200, а body.foo
равно 0.
Как я могу убедиться, что {}
тело отклонено?
Комментарии:
1. Во-первых, измените ваши примитивные значения, такие как
int
наInteger
. Во-вторых, вы можете использовать проверку, как сказал @Airy, или использоватьOptional
.2. Почему понижающий голос?
Ответ №1:
Вы могли бы проверить тело с помощью аннотаций :
@PostMapping("/endpoint")
public int myEndpoint(@RequestBody @Valid MyBody body) {
return body.foo;
}
вам также необходимо добавить зависимость проверки
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
тогда MyBody
это DTO, не используйте примитивные типы в качестве int, поскольку они имеют значение по умолчанию. Добавьте необходимые проверки :
class MyBody {
@NotNull
private Integer foo;
...
}
Комментарии:
1.
@NotNull
Параметр перед body является повторным. Это ни на что не влияет, и@RequestBody
по умолчанию требуется анонимизация = true.