java - Spring自定义转换器抛出异常

标签 java spring spring-mvc spring-boot

我正在编写一个 Spring 自定义转换器,它将 String 转换为 LocalDate

@Component
public class StringToLocalDateConverter implements Converter<String, LocalDate> {

  private static final String ISO_DATE_FORMAT = "yyyy-MM-dd";

  @Override
  public LocalDate convert(String s) {
    try {
      new SimpleDateFormat(ISO_DATE_FORMAT).parse(s);
    } catch (ParseException e) {
      throw new BadRequestException();
    }
    return LocalDate.parse(s);
  }
}

我希望转换器检查字符串日期是否以 "yyyy-MM-dd" 格式提供,如果没有,则抛出 BadRequestException 这是我处理的自定义异常通过我的自定义 @ControllerAdvice

问题是,尽管提供的字符串格式不为 'yyyy-MM-dd' 时会发生解析异常,但该方法永远不会抛出异常。

有什么帮助吗?

最佳答案

您尝试将“转换数据”和“处理 Web 响应”放在同一位置,从而混合了不同的关注点。一次只做一件事并遵循标准实践,在本例中这意味着抛出 ConversionFailedException。然后 Spring 将了解发生了什么,并根据您的 Web MVC 配置采取适当的操作(例如向客户端返回 400 状态代码)。如果您想提供自定义错误处理,请让您的建议处理转换服务重新抛出的异常。

请注意,在这种特定情况下,通过使用 @DateTimeFormat 就可以使用此逻辑。

关于java - Spring自定义转换器抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50744140/

相关文章:

java - 如果@transactional附加到某些方法,实体不会持久化到数据库中

java - Spring MVC jackson 和订单

java - JavaFx中的Table View如何定义setCellValueFactory

java - 传输文件的协议(protocol)

java - 我如何在 Eclipse 中使用 maven shade 插件

Spring Boot 2、Spring Security 5 和 @WithMockUser

java - Spring3 MVC : Validation not working

java - 使用 AsyncTask 时 onPostExecute 发生冲突 - android

java - 无法 Autowiring

java - Spring 属性未加载