And*_*ers 29 spring nullable spring-mvc optional guava
@RequestMapping(value = "/contact.html", method = RequestMethod.POST)
public final ModelAndView contact(
@RequestParam(value = "name", required = false) Optional<String> name) {
Run Code Online (Sandbox Code Playgroud)
如果不需要参数值且没有发送任何内容,Spring如何@RequestMapping处理Optional来自Guava库的内容?
那将会:
nullOptional.absent()可以Optional.fromNullable(T)用来接受请求吗?
Xae*_*ess 47
编辑(2015年10月): Spring 4处理java.util.Optional(来自Java 8)开箱即用并保证Optional本身不为空,但最初的问题是关于Guava的com.google.common.base.Optional用法,因为@RequestParam在这种特定情况下非常不鼓励(因为它可以为null).
原始答案(关于番石榴Optional):
不要这样做,只需使用String并让Spring处理null它的方式.
Optional<T>应该用作返回值,很少用作参数.在这种特殊情况下,Spring会将缺少的"name"参数映射到null,所以即使在实现自定义属性编辑器之后,您也将完成nullcheck:
@RequestMapping("foo")
@ResponseBody
public String foo(@RequestParam(required = false) final Optional name) {
return "name: " + (name == null ? "null" : name.get());
}
Run Code Online (Sandbox Code Playgroud)
这是完全没必要的(和错误Optional),因为它可以通过以下方式实现:
@RequestMapping("foo")
@ResponseBody
public String foo(@RequestParam(required = false) final String name) {
return "name: " + (name == null ? "null" : name);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60317 次 |
| 最近记录: |