Spring REStful Web 服务@initbinder 不允许其他验证
Spring REStful web service @initbinder not allowing other validation
我有以下 Rest 控制器:
@RestController
public class DocumentSearchController_global
{
@InitBinder//("TestCustomAnotation")
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new ChekAtleastOneValueValidator());
}
@RequestMapping(value = "/validator", method = RequestMethod.POST, produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
protected DocumentSearchResponse validatortest(@Valid @RequestBody TestCustomAnotation objDMSRequest, Errors e, BindingResult br) throws AppException
{
if(br.hasErrors())
System.out.println("ERRor");
if (e.hasErrors())
{
System.out.println("Got Error: "+ e.getFieldError());
}
DocumentSearchResponse objDocSearchResponse = null;
return objDocSearchResponse;
}
@ExceptionHandler
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleMethodArgumentNotValidException(
MethodArgumentNotValidException error) {
System.out.println("ERROR-->>>>>>>>>>>>>>>>>>>>>>>>" +error.getMessage());
return "Bad request: " + error.getMessage();
}
}
这是请求将被投射到的 bean:
public class TestCustomAnotation
{
@ValidDocumentModifiedDate({"7Days", "30Days","60Days"})
String docModifiedDate;
@NotNull
String objectId;
@NotNull
String jobId;
Setter and GEtter
}
- 在控制器中,如果我指定
binder.setValidator(new
ChekAtleastOneValueValidator());
,控制器将只转到
ChekAtleastOneValueValidator
它不会检查 @notnull
@ValidDocumentModifiedDate`
- 如果我没有
binder.setValidator(new
ChekAtleastOneValueValidator());
那么控件将检查
@notnull@ValidDocumentModifiedDate
验证但未验证
ChekAtleastOneValueValidator
.
我的问题是:Spring有没有办法使用Spring验证、自定义注解和@notnull注解 并获取所有验证的所有错误或 spring 允许仅使用 Spring 个验证器?
其实问题本身就错了。我得到了答案,我使用 Spring 验证器 class 来验证所有传入的请求,然后使用 @validated 代替 @valid。我不再根据请求使用注释,而是让 class 成为 POJO。就这样问题解决了
我有以下 Rest 控制器:
@RestController
public class DocumentSearchController_global
{
@InitBinder//("TestCustomAnotation")
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new ChekAtleastOneValueValidator());
}
@RequestMapping(value = "/validator", method = RequestMethod.POST, produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
protected DocumentSearchResponse validatortest(@Valid @RequestBody TestCustomAnotation objDMSRequest, Errors e, BindingResult br) throws AppException
{
if(br.hasErrors())
System.out.println("ERRor");
if (e.hasErrors())
{
System.out.println("Got Error: "+ e.getFieldError());
}
DocumentSearchResponse objDocSearchResponse = null;
return objDocSearchResponse;
}
@ExceptionHandler
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleMethodArgumentNotValidException(
MethodArgumentNotValidException error) {
System.out.println("ERROR-->>>>>>>>>>>>>>>>>>>>>>>>" +error.getMessage());
return "Bad request: " + error.getMessage();
}
}
这是请求将被投射到的 bean:
public class TestCustomAnotation
{
@ValidDocumentModifiedDate({"7Days", "30Days","60Days"})
String docModifiedDate;
@NotNull
String objectId;
@NotNull
String jobId;
Setter and GEtter
}
- 在控制器中,如果我指定
binder.setValidator(new ChekAtleastOneValueValidator());
,控制器将只转到ChekAtleastOneValueValidator
它不会检查@notnull
@ValidDocumentModifiedDate` - 如果我没有
binder.setValidator(new ChekAtleastOneValueValidator());
那么控件将检查@notnull@ValidDocumentModifiedDate
验证但未验证ChekAtleastOneValueValidator
.
我的问题是:Spring有没有办法使用Spring验证、自定义注解和@notnull注解 并获取所有验证的所有错误或 spring 允许仅使用 Spring 个验证器?
其实问题本身就错了。我得到了答案,我使用 Spring 验证器 class 来验证所有传入的请求,然后使用 @validated 代替 @valid。我不再根据请求使用注释,而是让 class 成为 POJO。就这样问题解决了