有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

查询参数中的java spring boot offsetDateTime

我尝试创建以下api:

    @GetMapping("/workerslist")
    public List<Worker> getWorkersList(
            @RequestParam(name = "lastPollBefore", required = false) OffsetDateTime lastPollBefore,
            @RequestParam(name = "lastPollAfter", required = false) OffsetDateTime lastPollAfter){
        return workerService.getWorkers(lastPollBefore, lastPollAfter);
    }

但当我调用它时,我得到以下错误:

{
  "_type": "ValidationError",
  "key": "validation-error",
  "message": "Failed to convert value of type 'java.lang.String' to required type 'java.time.OffsetDateTime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam java.time.OffsetDateTime] for value '2020-07-01T11:52:57.152Z'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2020-07-01T11:52:57.152Z]",
  "constraints": [
    
  ]
}

我找到了localDateTime的解决方案,但它们似乎不适用于offsetDateTime


共 (1) 个答案

  1. # 1 楼答案

    您需要为控制器中的OffsetDateTime参数添加@DateTimeFormat注释。例如

        @GetMapping("/workerslist")
        public List<Worker> getWorkersList(
                @RequestParam(name = "lastPollBefore", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)OffsetDateTime lastPollBefore,
                @RequestParam(name = "lastPollAfter", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)OffsetDateTime lastPollAfter){
            return workerService.getWorkers(lastPollBefore, lastPollAfter);
        }
    

    您可能想用自己的自定义映射器覆盖Spring的默认对象映射器

    比如:

    @Configuration
    public class JsonConfiguration {
    
      private static final ObjectMapper OBJECT_MAPPER =
          new ObjectMapper().registerModule(new JavaTimeModule())
              .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
              .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
              .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    
      @Bean
    @Primary
      public static ObjectMapper getObjectMapper() {
        return OBJECT_MAPPER;
      }
    }