spring - Spring中的@RequestParam如何处理Guava的Optional?

标签 spring spring-mvc guava nullable option-type

@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/

相关文章:

java - Jackson 使用 Guava 的 RateLimiter 时解析异常

java - GWT 序列化 TreeMap 的排序/比较器

java - 从@WebService获取对spring bean的引用

spring - 向所有存储库添加自定义行为,无需 xml 配置

java - JBOSS 部署警告 - 包含 CDI 注释但找不到 beans.xml

java - 如何实现Spring 3.1 Mvc注解驱动?

java - Spring MVC 中的 HTTP 303 重定向 *无需附加 JSESSIONID* 且无需触及任何 Spring 配置

Spring在单元测试中嵌入了ldap服务器

java - Spring 4.X 设置 XML 响应的内容类型

java - Guava 并发教程/代码