我无法使用验证注释。在传递应该通过注释验证的值时,我没有为它们配置消息。
控制器:
@RestController
public class AccountConfigController {
@Autowired
AccountConfigService accountConfigService;
@RequestMapping(value = "/${project.version}/acctconfigs", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public List<AccountConfigViewDTO> viewAccountConfig() throws BankServiceException {
List<AccountConfigViewDTO> accountConfigDTOList= accountConfigService.viewAccountConfig();
return accountConfigDTOList;
}
@RequestMapping(value = "/${project.version}/acctconfigs", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public boolean editAccountConfig(@RequestBody @Valid AccountConfigEditDTO accountConfigEditDTO) throws BankServiceException {
return accountConfigService.editAccountConfig(accountConfigEditDTO);
}
}
我使用了两个DTO,因为我没有使用它来完成所需的操作。
AccountConfigEditDTO:
public class AccountConfigEditDTO implements java.io.Serializable {
@JsonProperty("accountconfig")
@Valid
private List<AccountConfigViewDTO> accountConfigViewDTOList;
@NotBlank(message="accountconfig.lastUpdatedId.mandatory")
@Size(max=10,message="accountconfig.lastUpdatedId.size")
@JsonProperty("userId")
private String lstUpdtId;
//Getter and Setters and Constructors
}
AccountConfigViewDTO:
public class AccountConfigViewDTO implements Serializable {
@NotNull(message="newcustomer.accttype.mandatory")
private char acctType;
@NotEmpty(message="accountconfig.interest.mandatory")
@Digits(integer=8 , fraction=4 , message="accountconfig.interest.size")
private BigDecimal interestRate;
@NotEmpty(message="accountconfig.interest.mandatory")
@Digits(integer=8 , fraction=4 , message="accountconfig.minimumBalance.size")
private BigDecimal minBalance;
//Getters and Setters and constructors
}
当我传递数据时,例如:
{
"accountconfig" : [
{
"acctType": "C",
"interestRate": "",
"minBalance": 500
},
{
"acctType":"S",
"interestRate": 4.00,
"minBalance": 5000.0
}
],
"userId": "admin"
}
我得到了
{“errorCode”:500,“errorMsg”:“发生未知错误。”}
但不是我的自定义消息“利率是强制性的”。我在application.properties文件中给出了此错误消息映射。
如果代码中有任何问题,请告诉我吗?
答案 0 :(得分:1)
最终尝试了各种选项,我得到了解决问题的方法。所以考虑发布它以防万一其他人遇到这个问题。
解决方案是在List字段的AccountConfigEditDTO中添加@Valid:
public class AccountConfigEditDTO implements java.io.Serializable{
@JsonProperty("accountconfig")
private @Valid List<AccountConfigViewDTO> accountConfigViewDTOList;
@NotBlank(message="accountconfig.lastUpdatedId.mandatory")
@Size(max=10,message="accountconfig.lastUpdatedId.size")
@JsonProperty("userId")
private String lstUpdtId;
}
这就是诀窍。但是对于验证char字段仍然没有运气,我认为唯一的方法是进行自定义验证器注释。
我对上述问题的理解还有一点是验证没有进入列表中的DTO,因此添加@Valid就是这样做的。如果有人有更好的解释,请发表评论。