这是我的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”。
3条答案
按热度按时间rdrgkggo1#
您可以验证您的请求主体,只需像
@Valid @RequestBody TestPOJO tpj
这样注解您的请求主体,然后在您的POJO类中,向字段添加以下注解:@Size(min=5, max=5) private String x;
它会检查字符串x的长度。
你可以使用更多的注解,依赖于
javax.annotation
包。记住你需要一个注解处理器来使它工作,例如hibernate-validator-annotation-processor
camsedfj2#
你可以参考Spring官方网站上的这个教程-Validating Form Input。
我修改了你的源代码如下,并测试了它与 Postman ,现在它将返回400(坏请求)。我不认为它应该返回401错误的输入数据。
您的TestPOJO:
您的REST API:
顺便说一句,一旦您将
spring-boot-starter-web
的依赖项添加到您的pom文件中,hibernate-validator
将自动添加。im9ewurl3#
这是因为对象Map器FailOnUnknownProperties的最新springboot版本的更新。如果你添加这个bean到你的配置,你将得到预期的400