@RequestMapping(value = "/contact.html", method = RequestMethod.POST)
public final ModelAndView contact(
@RequestParam(value = "name", required = false) Optional<String> name) {
Spring 的 @RequestMapping
如何处理 Optional
来自 Guava library如果不需要参数值并且什么都不发送?
会是:
- 设置为
null
- 设置为
Optional.absent()
Optional.fromNullable(T)
可以用来接受请求吗?
最佳答案
编辑(2015 年 10 月): Spring 4 处理 java.util.Optional
(来自 Java 8)开箱即用,保证 Optional
本身不为空,但最初的问题是关于 Guava 的 com.google.common.base.Optional
用作@RequestParam
在这种特定情况下非常不鼓励(因为它可以为空)。
原始答案(关于 Guava 的 Optional
):
不要那样做,用 String
让 Spring 处理 null
以它的方式。
Optional<T>
应该用作 return value并且很少作为参数。在这种特殊情况下,Spring 将映射缺失的 "name"
null
的参数, 所以即使在实现自定义 property editor 之后您将以 null
结束检查:
@RequestMapping("foo")
@ResponseBody
public String foo(@RequestParam(required = false) final Optional name) {
return "name: " + (name == null ? "null" : name.get());
}
这是完全没有必要的(并且误用 Optional
),因为它可以通过以下方式实现:
@RequestMapping("foo")
@ResponseBody
public String foo(@RequestParam(required = false) final String name) {
return "name: " + (name == null ? "null" : name);
}
关于spring - Spring中的@RequestParam如何处理Guava的Optional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20237796/