我正在使用spring构建Web服务并遇到以下问题。 有一个邮政服务如下。
@RequestMapping(value = "/postSomething", method = RequestMethod.POST)
public ResponseDTO postSomething(@RequestBody ADto aDto){
//post data
//return response
}
public class ADto{
private String firstParam;
private String secondParam;
// getter setter
}
所以,我的问题是如何知道firstParam和secondParam的值是否在请求体中提供。
RequestBody: { paramFirst: null, paramSecond: null}
EDIT1: 抱歉,问题不完整: 对于RequestBody:{paramFirst:first Value},对于paramSecond的上述请求值将为null。 那么,我怎么知道paramSecond是否包含在请求中。
EDIT2: 我不想验证。我想知道的是,是否 请求是否包含特定参数。 因为有两种不同的情况,一种是参数的值被赋予null而另一种是参数不包含在请求中。
答案 0 :(得分:1)
您可以使用ENABLED=yes
这样的注释(伪代码,不测试它):
@Valid
您需要一个异常处理程序来处理验证错误。
@RequestMapping(value = "/postSomething", method = RequestMethod.POST)
public ResponseDTO postSomething(@Valid @RequestBody ADto aDto){
// MethodArgumentNotValidException will be thrown if validation fails.
}
你的班级。
@ExceptionHandler
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public Error handleException(MethodArgumentNotValidException exception) {
//do something with the validation message: exception.getBindingResult()
}
答案 1 :(得分:0)
尝试使用Hibernate Validator(http://hibernate.org/validator/),它很容易与Spring集成。 这样,您需要注释您的Dto以强制验证所需的参数,然后调用validate。
public class ADto{
@NotNull
private String firstParam;
@NotNull
private String secondParam;
// getter setter
}
@RequestMapping(value = "/postSomething", method = RequestMethod.POST)
public ResponseDTO postSomething(@RequestBody ADto aDto){
validator.validate(aDto)
//post data
//return response
}