我正在使用请求有效负载中的对象数组调用API,我在@Request estBody中添加了@有效注释以检查是否有任何空属性在我的有效负载中发送。我希望我正在发送的任何空数据都应该抛出错误。但我的代码没有抛出错误
下面是我的实体课
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@DynamicUpdate
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(name = "student_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer studentId;
@NotNull
@Column(name = "name")
private String name;
@NotNull
@Column(name = "gender")
private String gender;
}
这是我的控制器类
@RestController
@CrossOrigin
public class StudentController {
@PostMapping("/class/{classId}/student")
public Student addStudent(@PathVariable Integer classId,@Valid @RequestBody List<Student>
student) {
// My logic Comes Here
return Student;
}
}
验证依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
我的请求有效负载
[{
"name":"kiran",
"gender":"male"
},
{
"name":"divya"
}
]
当我发送上述有效负载时,我希望抛出一个错误,因为我没有发送不为null的性别,但spring没有抛出任何错误。
我是否错过了@valid的工作机会。
您不能将有效的应用于java。util。列表
请参阅:Spring MVC-@在REST服务中的bean列表中有效
如果遇到以下问题,例如:无法看到返回给客户端的验证错误(默认消息),则可以执行以下操作:
顶级解决方案1:只需添加devtools。这应该可以解决问题。完成此操作后,所有绑定结果都返回给客户端。我建议您首先对此进行测试:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
解决方案2:
我发现这是由于使用了Spring Boot 2.3,所以如果您使用的是Spring Boot 2.3或更高版本,请在pom中添加此依赖项。xml文件不再包含在“web”依赖项本身中。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
现在有必要在java/resources/application中设置“include binding errors”。属性设置为“始终”。“message”也是如此,尽管我认为这是可选的。
server.error.include-message=always
server.error.include-binding-errors=always
解决方案3:(在我发现解决方案2之前,它可能也很有用)
所以我发现这是因为有了Spring boot 2.3。但我在Spring Boot v2.3中找不到关于@Valid的最新用法的警告消息。
因此,通过在pom中调整发布版本,我最终切换回了Spring boot v2.2.10(2.2的最新版本)。xml文件如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
通过回滚到旧版本,这对我来说非常有效。虽然我想有一天更新我的Spring Boot版本。(重温解决方案1
如果使用Spring boot 2.3.3。释放。然后在POM中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
使用示例:
//update audTipo
@PutMapping("audTipo/{id}")
public ResponseEntity<AudTipo> update(@PathVariable(value="id") Integer audTipoId,
@Valid @RequestBody AudTipo audTipoDetils) throws ResourceNotFundException
{
AudTipo audTipo = audTipoRepository.findById(audTipoId).orElseThrow(()-> new
ResourceNotFundException("NF " + audTipoId));
audTipo.setXdesc(audTipoDetils.getXdesc());
return ResponseEntity.ok(this.audTipoRepository.save(audTipo));
}
我目前正在使用Spring3注释和Hibernate3来实现数据库连接。我还必须使用spring Tiles。 我的spring-servlet.xml是: 我的控制器类: 和我的serviceImpl类: 和我的DaoImpl类: 它仍然给出了以下例外情况。 org.springframework.beans.factory.BeanCreationException:创建名为“MyContro
问题内容: 我在属性文件中定义了一个属性: 然后,我有了class, 仅 当属性设置为true时, 才 应 创建一个Property Configuration bean 。 __ 这是我的课: 如果我在里面添加,只是为了进行实验并查看的值是多少,那么 确实 创建了bean , 并且我看到的值是。 如果我删除了,留下的条件作为和属性更改来自于豆,从未创建(既不也不对)。 我应该怎么做才能基于该属性
问题内容: 我有一个终结点实现,即将一个对象传递给参数列表。我正在尝试使用@NotNull批注来验证该对象是否为null。 如果该对象被验证为非null,则端点将仅返回200 OK响应。但是,当我使用指定的路径向该终结点发出请求时,体内没有任何内容时,不会引发任何错误。相反,我能够检索200响应(即使我在返回响应之前检查对象是否为null,也表明是这种情况)。 有人可以指导我如何以正确的方式验证对
我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它
当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。
我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括: