Spring Boot Sping Boot 应用程序中的REST API未抛出错误请求,尽管我传递了输入POJO的错误属性

bnl4lu3b  于 2023-01-13  发布在  Spring
关注(0)|答案(3)|浏览(90)

这是我的REST API:

@RequestMapping(value="/test1")
public String test1(@RequestBody TestPOJO tpj) {
    if(tpj instanceof TestPOJO) {
        System.out.println("Correct data format passed ");
    }
    return "working1";

}

以下是TestPOJO的结构:

public class TestPOJO {

    private String x;
    private String y;

    public String getX() {
        return x;
    }
    public void setX(String x) {
        this.x = x;
    }
    public String getY() {
        return y;
    }
    public void setY(String y) {
        this.y = y;
    }   
}

在POSTMAN客户端中,我将此请求主体传递给此API:

{
"sd":"u",
"egergdrg":34
}

它的打印“正确的数据格式传递“。为什么这个输入结构被作为一个示例“TestPOJO”。我正在传递完全不同的属性内的身体,即使不同类型的数据。它不应该给予400坏请求错误?为什么它运行成功?我如何验证所有传入的请求主体是否具有类似于输入参数的正确结构,如果不返回400错误?
在pom.xml中添加的FYI依赖项是“spring-boot-starter-web”、“spring-boot-starter-test”和“spring-boot-devtools”。

rdrgkggo

rdrgkggo1#

您可以验证您的请求主体,只需像@Valid @RequestBody TestPOJO tpj这样注解您的请求主体,然后在您的POJO类中,向字段添加以下注解:
@Size(min=5, max=5) private String x;
它会检查字符串x的长度。
你可以使用更多的注解,依赖于javax.annotation包。记住你需要一个注解处理器来使它工作,例如hibernate-validator-annotation-processor

camsedfj

camsedfj2#

你可以参考Spring官方网站上的这个教程-Validating Form Input
我修改了你的源代码如下,并测试了它与 Postman ,现在它将返回400(坏请求)。我不认为它应该返回401错误的输入数据。
您的TestPOJO:

public class TestPOJO {
    @NotNull
    private String x;

    @NotNull
    private String y;

    public String getX() {
        return x;
    }
    public void setX(String x) {
        this.x = x;
    }
    public String getY() {
        return y;
    }
    public void setY(String y) {
        this.y = y;
    }   
}

您的REST API:

@RequestMapping(value="/test1")
public String test1(@Valid @RequestBody TestPOJO tpj) {
    if(tpj instanceof TestPOJO) {
        System.out.println("Correct data format passed ");
    }
    return "working1";

}

顺便说一句,一旦您将spring-boot-starter-web的依赖项添加到您的pom文件中,hibernate-validator将自动添加。

im9ewurl

im9ewurl3#

这是因为对象Map器FailOnUnknownProperties的最新springboot版本的更新。如果你添加这个bean到你的配置,你将得到预期的400

@Bean
public Jackson2ObjectMapperBuilder mapperBuilder() {
    return new Jackson2ObjectMapperBuilder().failOnUnknownProperties(true);
}

相关问题