java - 在 Spring Controller 中使用日期参数的最佳实践?

标签 java spring spring-mvc parameters

写了几个后端API后,发现几乎每一个需要按日期过滤数据的方法,下面的代码都是重复的:

@GetMapping(value="/api/test")
@ResponseBody
public Result test(@RequestParam(value = "since", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate since,
                   @RequestParam(value = "until", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate until) {
    // Date validation code I want to eliminate
    since = ObjectUtils.defaultIfNull(since, DEFAULT_SINCE_DATE);
    until = ObjectUtils.defaultIfNull(until, LocalDate.now().plusDays(1));
    if(since.isAfter(until)) {
        throw new SinceDateAfterUntilDateException();
    }

    // Do stuff
}

显然这是某种代码味道。但是,由于在使用它们查询服务/DAO 之前我确实需要验证 sinceuntil,所以我不确定应该将这些代码提取到哪里?

有什么建议吗?

最佳答案

  1. 实现 org.springframework.core.convert.converter.Converter;界面。
  2. 注册 spring 转换服务。
  3. 在你的 Controller 中使用 下面分享示例代码:
public class MyCustomDateTypeConverter implements Converter<String, LocalDate> {

  @Override
  public LocalDate convert(String param) {
      //convert string to DateTime
      return dateTiemObjectCreatedfromParam;
  }

}
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">  <property name="converters">    <list>
        <bean class="com.x.y.z.web.converters.MyCustomDateTypeConverter"/>  </list>     </property> 
</bean>


<mvc:annotation-driven conversion-service="conversionService">

</mvc:annotation-driven>


public Result test(LocalDate since,LocalDate until) {

    since = ObjectUtils.defaultIfNull(since, DEFAULT_SINCE_DATE);
    until = ObjectUtils.defaultIfNull(until, LocalDate.now().plusDays(1));
    if(since.isAfter(until)) {
        throw new SinceDateAfterUntilDateException();
    }

    // Do stuff
}

关于java - 在 Spring Controller 中使用日期参数的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409266/

相关文章:

java - 如何修复 ArrayList 类型的类型不匹配错误?可能的多维数组?

java - 如何让敌人朝玩家方向射击

java - 无法让 JavaFX 在 Eclipse 中工作

java - 如何使用 spring 集成正确获取入站消息 header

java - 在 Spring MVC 中 Autowiring MongoRepository

java - 如何使用 Java 配置创建 Spring RESTFul 服务?

java - ${pageContext.request.contextPath} 如何在本地和远程工作?

Java OpenCV 校正轮廓

java - Spring - 所有的 bean 都被处理了吗?

spring - applicationContext 找不到 Servlet 上下文的 Controller