如何知道春天的帖子请求体中是否提供了参数值?

时间:2015-12-09 12:48:47

标签: java spring

我正在使用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而另一种是参数不包含在请求中。

2 个答案:

答案 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
}