我正在使用带有注释的Spring Validator(JSR 303),并希望在错误消息中解析属性(idEnveloppe)值。考虑这个简单的场景:
@NotEmpty(message = "GCE-COT-DTC-RJFLX03 La donnée &idEnveloppe du bloc entête du flux de cotisation DSN n'est pas renseignée")
@NotNull(message = "GCE-COT-DTC-RJFLX03 La donnée &idEnveloppe du bloc entête du flux de cotisation DSN n'est pas renseignée")
@Pattern(regexp = "[0-9]{14}", message = "GCE-COT-DTC-RJFLX04 La donnée '${idEnveloppe}' du bloc entête du flux de cotisation DSN n'est pas valide}")
private String idEnveloppe;
打印错误:
private BindingResult bindAndValidate(final DsnCotFluxDto item) {
DataBinder binder = new DataBinder(item);
binder.setValidator(validator);
binder.validate();
// LOG.error(binder.getErrors().getBindingResult().toString());
return binder.getBindingResult();
}
/**
* Etude du cas des erreurs
* @param results résultat des validations
* @param item
* @throws BusinessException
*/
private void buildValidationException(final BindingResult results, final DsnCotFluxDto item) throws BusinessException {
StringBuilder msg = new StringBuilder();
String code;
String message;
String rejectedValue;
for (ObjectError error : results.getAllErrors()) {
code = error.getDefaultMessage().substring(0, 19);
message = error.getDefaultMessage().substring(20);
// rejectedValue = error.getObjectName().getRejectedValue();
msg.append("\n\t \t---Error code : -- " + code + " ---Error message : --" + message + "\n");
LOG.warn("\n\t \t---Error code : -- " + code + " ---Error message : --" + message + "\n");
}
// throw new ValidationException(msg.toString());
}
谢谢
答案 0 :(得分:2)
以下是documentation的引用:
从Hibernate Validator 5(Bean Validation 1.1)开始,可以在约束违规消息中使用统一表达式语言(由JSR 341定义)。 [...]验证引擎在EL上下文中提供以下对象:
- 名称validatedValue
下的当前验证值(属性,bean,方法参数等)
所以,请尝试以下方法:
@Pattern(regexp = "[0-9]{14}", message = "GCE-COT-DTC-RJFLX04 La donnée '${validatedValue}' du bloc entête du flux de cotisation DSN n'est pas valide}")
答案 1 :(得分:0)
我用它来获取它们
rejectedValue = ((FieldError) error).getRejectedValue().toString();
我将它们插入消息字符串后,如:
message = new StringBuilder(message).insert(10, rejectedValue).toString();
它工作正常
谢谢