【发布时间】:2019-02-22 11:21:47
【问题描述】:
我正在使用 Spring Data JPA 来创建应用程序。在那我正在尝试使用注释来实现服务器端验证。我在带有自定义消息的文件上添加了 @NotNull 注释。我还添加了@valid 和@RequestBody
但问题是当我将nAccountId 传递为null 时,我没有收到自定义消息,即Account id can not be null 我收到“消息”:"Validation failed for object='accountMaintenanceSave'. Error count: 1",。
谁能告诉我为什么我没有收到自定义消息?
控制器代码
@PutMapping("/updateAccountData")
public ResponseEntity<Object> saveData(@Valid @RequestBody AccountMaintenanceSave saveObj){
return accService.saveData(saveObj);
}
AccountMaintenanceSave 类
import javax.validation.constraints.NotNull;
public class AccountMaintenanceSave {
@NotNull(message="Account id can not be null")
public Integer nAccountId;
@NotNull
public String sClientAcctId;
@NotNull
public String sAcctDesc;
@NotNull
public String sLocation;
@NotNull
public Integer nDeptId;
@NotNull
public Integer nAccountCPCMappingid;
@NotNull
public Integer nInvestigatorId;
//Getter and Setter
}
RestExceptionHandler 类
@ControllerAdvice
public class RestExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleAllExceptionMethod(Exception ex, WebRequest requset) {
ExceptionMessage exceptionMessageObj = new ExceptionMessage();
exceptionMessageObj.setMessage(ex.getLocalizedMessage());
exceptionMessageObj.setError(ex.getClass().getCanonicalName());
exceptionMessageObj.setPath(((ServletWebRequest) requset).getRequest().getServletPath());
// return exceptionMessageObj;
return new ResponseEntity<>(exceptionMessageObj, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
我不知道之前到底发生了什么,也没有收到正确的消息。现在使用相同的代码得到这样的结果和正确的消息
{
"message": "Validation failed for argument at index 0 in method: public org.springframework.http.ResponseEntity<java.lang.Object> com.spacestudy.controller.AccountController.saveData(com.spacestudy.model.AccountMaintenanceSave), with 1 error(s): [Field error in object 'accountMaintenanceSave' on field 'nAccountId': rejected value [null]; codes [NotNull.accountMaintenanceSave.nAccountId,NotNull.nAccountId,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [accountMaintenanceSave.nAccountId,nAccountId]; arguments []; default message [nAccountId]]; default message [Account id can not be null]] ",
"error": "org.springframework.web.bind.MethodArgumentNotValidException",
"path": "/spacestudy/rockefeller/admin/account/updateAccountData"
}
在message 归档中我只能打印[Account id can not be null] 吗?
【问题讨论】:
-
你能提供你的 ExceptionHandler 类吗?我使用相同的注释
@NotNull,它对我来说非常有用 -
我添加了 ExceptionHandler 类
标签: java validation spring-data-jpa