gpt4 book ai didi

java - 在 Spring Boot 中将无效的 json 请求正文传递给 Rest api 时未收到异常

转载 作者:行者123 更新时间:2023-12-02 03:52:31 25 4
gpt4 key购买 nike

我在 spring-boot 中创建了一个 Rest API,问题是我将 4 个参数作为 JSON 对象作为 requestbody 参数。

现在,如果我传递带有 5 个参数的 JSON 对象,而我的 API 仍然调用,则在序列化 JSON 对象时不会发生断言异常。我有一个 dto 类,如下所示,带有构造函数

public class testDto{
@NotNull(message = "fistName can not be null.")
private String fistName;
@NotNull(message = "lastName can not be null.")
private String lastName;
private String nickName;

public testDto() {
}

public testDto(@NotNull(message = "fistName can not be null.") final String fistName ,@NotNull(message = "lastName can not be null.") final String lastName , final String nickName){
super();
this.fistName = fistName;
this.lastName = lastName;
this.nickName = nickName;
}
}

我的restapi如下,

@PostMapping(path ={ "/api/v1/user"}, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> saveUser(
@Valid @RequestBody(required = true) final testDto dto) throws Exception {
}

现在,在调用我的 API 时,我传递请求正文,如下所示

{
"fistName" : "abc",
"lastName" : "xyz",
"nickName" : "pqr",
"age" : 25
}

现在,当我传递 age 参数并调用 API 时,我的 API 仍在工作,而不是抛出异常,因为我已经传递了年龄,而年龄不是我的 dto 类的成员,因此没有找到任何构造函数.

预期结果:不允许调用API实际结果:允许我调用API

我也尝试过断言异常声明和绑定(bind)异常,但没有取得任何成功。

还设置属性

spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

最佳答案

Spring Boot 使用 Jackson 将 JSON 有效负载映射到 testDto 类的实例。默认情况下, jackson 是 configured to ignore entries in the JSON that it cannot map to the DTO 。这遵循 robustness principle或众所周知的波斯特尔定律。

您可以将 Jackson 配置为在无法将 JSON 中的条目映射到 DTO 上的属性时失败,方法是将以下行添加到 src/main 中应用程序的 application.properties 文件中/资源:

spring.jackson.deserialization.fail-on-unknown-properties=true

关于java - 在 Spring Boot 中将无效的 json 请求正文传递给 Rest api 时未收到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com