2

我在通过 HTTP POST 端点传入的对象字段上使用 Spring 的 @DateTimeFormat 注释和自定义模式。特定字段在前端 UI 上使用 javascript 小部件设置,该小部件始终使用“en_us”区域设置。但是,如果浏览器设置为“en_us”以外的区域设置,则后端的日期/时间解析可能会失败,因为@DateTimeFormat 使用浏览器(或 HTTP 标头)区域设置而不是“en_us”。

无论如何强制 DateTimeFormat 注释使用“en_us”语言环境?

我意识到 DateTimeFormat 通过使用 HTTP 标头语言环境正在做有意义的事情。但是,由于我控制前端,并且暂时不想更改前端 javascript 小部件,我想知道是否有办法设置 DateTimeFormat 的语言环境。

4

1 回答 1

0

是否有必要使用自定义日期格式?一般来说,最好使用不可知的日期格式,例如使用 ISO 日期格式,添加时区,这是国际性的,或者不太喜欢使用 UTC 的毫秒数。这样您就不必担心这些细节。如果绝对需要使用的东西是:

  1. pattern设置固定模式的属性,这里为区域en_us

  2. 一个 Spring 过滤器(未验证,伪代码):

@Component
public class MyDateFilter implements Filter {

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    HttpServletRequest incoming = (HttpServletRequest) request;
    HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(incoming) {

      public String getHeader(String name) {
        if (<HTTP header locale>.equals(name)) {
          return TODO;
        }
        return super.getHeader(name);
      }
    };
    chain.doFilter(wrapper, response);
  }

}
于 2021-11-19T00:19:09.090 回答