使用@RequestBody创建一个新对象(required = false)

时间:2017-11-08 08:35:24

标签: spring spring-mvc spring-boot

我有一个带有可选@RequestBody参数的Rest Controller,如果用户没有指定它我想初始化。现在我这样做了:

@PostMapping
public ResponseEntity<Page<?>> findAll(
            @RequestBody(required=false) MyRequest request,
            Pageable pageable
        ) {
  if (request == null) {
    request = new MyRequest();
  }
...
}

是否有任何自动方式告诉Spring MVC,如果参数为null,它必须创建一个新对象?

2 个答案:

答案 0 :(得分:0)

我没有完全控制Spring,但我认为没有一种自动方式来初始化像这样的对象。如果正文为空,则消息转换器初始化具有null值的对象。这就是为什么你有NPE的原因。 您可以使用Java 8 Optional<Myrequest>,即使我在这种情况下从不使用它,我也很想知道消息转换器如何处理这种情况。如果你测试它,请告诉我。

答案 1 :(得分:0)

请记住@RequestBody调用MyRequest的空构造函数。因此request始终引用该类的实例。

结论:request == nullrequest.equals(null)无法评估为真。