Spring 4 java.util.Optional
开箱 即用Optional
(从Java 8开始)处理并保证其 本身不为null ,但最初的问题是关于Guava 在此特定情况下强烈反对com.google.common.base.Optional
使用哪种用法@RequestParam
(因为它 可以 为null)。
(关于番石榴Optional
):
不要那样做,只需使用String
并让Spring null
以它的方式处理即可。
Optional<T>
应该用作返回值 ,很少用作参数。在这种特殊情况下,Spring会将缺少的"name"
参数映射到null
,因此,即使在实现自定义属性编辑器后,您也将完成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);
}