我有以下传入的ArrayList(为了清晰和示例的目的,请减少(。
[
{
"details1":
{
"firstname":"John",
"lastname":"Doe"
},
"details2":
{
"phone":"9999999999"
}
}
{
"details1":
{
"firstname":"Jane",
"lastname":"Doe"
},
"details2":
{
"phone":"9999999999"
}
}
]
对象/模型详细信息1
@Data
public class details1{
@Column(name="firstname")
@NotBlank(message = "First Name is a required field.")
public String firstname;
@Column(name="lastname")
@NotBlank(message = "Last Name is a required field.")
public String lastname;
}
对象/模型详细信息2
@Data
public class details2{
@Column(name="phone")
@NotBlank(message = "Phone is a required field.")
public String phone;
}
我希望bindingresult
在名字和姓氏以及电话为空的情况下显示错误。
如果我只发送details1
或details2
,并用details1 details1
更改ArrayList<profiles> profiles
,以及用详细信息更新JPARepository,那么它就可以工作1。然而,这只允许我发送1个对象。
@RestController
public class controller {
@PostMapping("/v1/submit")
public void submit(@Valid @RequestBody ArrayList<profiles> profiles, BindingResult bindingresult) { }
System.out.println(bindingresult)
}
配置文件对象/模型
@Data
@Entity
public class profiles{
@Id
@GeneratedValue
@Column(name="id")
public Long id;
/*
I assume somewhere here I need to add a variable for the profile
Model/DTO and something to account for @Valid on said variable.
Something similar to this
// public List<Map<String, Map<String, String>>> profile
*/
}
配置文件存储库
@Repository
public interface profilesrepository extends JpaRepository<profiles, Long>{
}
您对@Valid
的使用是正确的。您还必须使用@Validated
对控制器类进行注释。您可以在此处阅读@Validated
注释文档。
如果这不起作用,那么也要确保您也有spring-boot-starter-validation
依赖项。最新版本的依赖项可以在这里找到。
编辑并附加说明/示例:
你的profiles
类应该是这样的:
@Data
@Entity
public class profiles {
@Id
@GeneratedValue
@Column(name="id")
private Long id;
@Valid
private details1 details1;
@Valid
private details2 details2;
public details1 getDetails1() {
return details1;
}
public void setDetails1(details1 details1) {
this.details1 = details1;
}
public details2 getDetails2() {
return details2;
}
public void setDetails2(details2 details2) {
this.details2 = details2;
}
}
属性顶部的@Valid
注释表示其中的相应值(使用约束验证注释进行注释(要经过约束验证。
然后,您可以收到一个JSON,它看起来如下:
[
{
"details1":
{
"firstname": "John",
"lastname": "Doe"
},
"details2":
{
"phone":"9999999999"
}
},
{
"details1":
{
"firstname":"Jane",
"lastname":"Doe"
},
"details2":
{
"phone":"9999999999"
}
}
]
如果您对发送到控制器的数据有(一些(控制权,那么您可以调整值(例如,将firstname
设为空字符串(,以查看@NotBlank
中指定消息的约束验证。在这种情况下,您可以从控制器方法中删除BindingResult bindingresult
。