【问题标题】:Spring MVC 4 @RequestParam DTO mandatory attributesSpring MVC 4 @RequestParam DTO 强制属性
【发布时间】:2016-12-15 17:17:29
【问题描述】:

我创建了一个 DTO 对象,它包含的属性与我的 @RestController 需要接收的参数一样多。其中一些是强制性的,而另一些则不是。

控制器方法如下:

@RequestMapping(path = "/endpoint_url", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public List<ReturnDTO> endpoint(@RequestParam(required = false) FilterDTO filter) { ... }

我想知道是否有任何方法可以像使用 @RequestParam(required = true) 注释一样使某些 FilterDTO 属性成为必需属性。

我尝试了 javax.validation.constraints.NotNull 中的 @NotNull 注释,但它似乎不起作用。

欢迎提出任何想法!

【问题讨论】:

  • 如果要将请求属性绑定到对象,请不要使用@RequestParam 使用@ModelAttribute。添加@Valid 并将@NotNull@NotEmpty 放在dto 中所需的字段上。
  • 这个解决方案就像一个魅力!谢谢!

标签: java spring spring-mvc servlets


【解决方案1】:

这个想法是,您需要将 org.springframework.validation.annotation 中的 @Validated 或 @Valid 与您的 @RequestBody 对象一起使用 所以它看起来像这样

@RequestMapping(path = "/endpoint_url", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public List<ReturnDTO> endpoint(@Validated @RequestParam FilterDTO filter){}

那么FilterDTO中的所有变量都是可选的,除非你给它们添加@NotNull注解

所以它会像

@NotNull
private String name

这意味着名字不能为空,否则会抛出异常

【讨论】:

  • GET 调用不能有@RequestBody。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多