Spring은 유효한 LocalDateTime을 구문 분석 할 수 없습니다.

Findusl

이해가 안 돼요, 여기서 뭐가 잘못 됐나요? 날짜가 맞는 것 같습니다.

java.time.format.DateTimeParseException: Text '1971-04-29T00:00:00' could not be parsed at index 2
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
at org.springframework.format.datetime.standard.TemporalAccessorParser.parse(TemporalAccessorParser.java:75)
at org.springframework.format.datetime.standard.TemporalAccessorParser.parse(TemporalAccessorParser.java:46)
...

이 코드를 실행하면 작동하므로 일종의 Spring 문제라고 가정합니다.

LocalDateTime.parse("1971-04-29T00:00:00")

해당 스프링 컨트롤러 :

@Controller
@RequestMapping(produces = [MediaType.APPLICATION_JSON_VALUE])
class RecordController(
    val recordRepository: RecordRepository
) {

    @PostMapping("/records")
    @ResponseBody
    @ResponseStatus(value = HttpStatus.CREATED)
    fun createRecord(
        @RequestBody
        record: RecordEntity
    ): RecordEntity {
        return recordRepository.save(record)
    }

    @GetMapping("/records")
    @ResponseBody
    fun getRecords(
        @RequestParam("from", required = false)
        from: LocalDateTime?,
        @RequestParam("to", required = false)
        to: LocalDateTime?,
        @RequestParam("client-type", required = false)
        clientType: ClientType?
    ): Iterable<RecordEntity> {
        var spec: Specification<RecordEntity> = where(null)!!
        if (from != null)
            spec = spec.andFrom(from)
        if (to != null)
            spec = spec.andTo(to)
        if (clientType != null)
            spec = spec.andClientTypeSpec(clientType)
        return recordRepository.findAll(spec)
    }

    fun Specification<RecordEntity>.andFrom(from: LocalDateTime): Specification<RecordEntity> {
        return and { root: Root<RecordEntity>, criteriaQuery: CriteriaQuery<*>?, criteriaBuilder: CriteriaBuilder ->
            criteriaBuilder.greaterThan(root.get<LocalDateTime>("createdAt"), from)
        } ?: this
    }

    fun Specification<RecordEntity>.andTo(to: LocalDateTime): Specification<RecordEntity> {
        return and { root: Root<RecordEntity>, criteriaQuery: CriteriaQuery<*>?, criteriaBuilder: CriteriaBuilder ->
            criteriaBuilder.lessThan(root.get<LocalDateTime>("createdAt"), to)
        } ?: this
    }

    fun Specification<RecordEntity>.andClientTypeSpec(clientType: ClientType): Specification<RecordEntity> {
        return and { root: Root<RecordEntity>, criteriaQuery: CriteriaQuery<*>?, criteriaBuilder: CriteriaBuilder ->
            criteriaBuilder.equal(root.get<ClientType>("clientType"), clientType)
        } ?: this
    }
}

엔티티 객체 :

@Entity
@Table(name = "RECORDS")
class RecordEntity(
    @Id @Column(name = "BOOKING_ID")
    var bookingId: String,
    @Column(name = "CLIENT")
    @Enumerated(EnumType.STRING)
    var clientType: ClientType,
    @Column(name = "CREATED_AT", columnDefinition = "TIMESTAMP")
    var createdAt: LocalDateTime
)

저장소는 다소 지루합니다.

@Repository
interface RecordRepository : CrudRepository<RecordEntity, String>, JpaSpecificationExecutor<RecordEntity> {

}

나머지 전화 :

curl --location --request GET 'localhost:8080/records?to=1971-04-29T00:00:00'

문제의 원인이 확실하지 않으므로 모든 코드를 포함했습니다. 도움을 주셔서 감사합니다 :)

Sotirios Delimanolis

Spring에는 숫자 및 날짜와 같은 JDK 유형에 대한 다양한 변환 유틸리티가 있습니다.

특히 Spring Boot는 Spring MVC 웹 인프라를 설정하기 위해 .NET DateTimeFormatterRegistrar의 날짜 유형에 대해 다양한 포맷터를 등록하는 데 사용 합니다 java.time.

이 글을 쓰는 시점에서에는를 LocalDateTime사용합니다.

DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)

내 시스템의 Locale경우 다음 DateTimeFormatter과 같은 형식을 생성합니다.

12/19/20, 8:45 PM

당신의 실수로

Text '1971-04-29T00:00:00' could not be parsed at index 2

나는 그것이 파싱을 위해 똑같이한다고 가정합니다 : 인덱스 2는 /.

직접 등록하는 것과 같이 여러 가지 방법으로이 문제를 해결할 수 있습니다 DateTimerFormatterRegistrar. 제 생각에 가장 쉬운 해결책은 매개 변수에 적절한 @DateTimeFormat. 예를 들면

@RequestParam @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime to

이것은 Spring MVC가 DateTimeFormatter날짜 시간 문자열을 파싱 할 수 있는 별도의 인스턴스 를 사용하도록 강제 합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

유효한 JSON 문자열을 구문 분석 할 수 없습니다.

분류에서Dev

Jackson은 List <Long>을 구문 분석 할 수 없습니다.

분류에서Dev

복잡한 유형의 속성을 구문 분석 할 수 없습니다.

분류에서Dev

typesafe 구성은 변수로 URL을 구문 분석 할 수 없습니다.

분류에서Dev

localdate 구문 분석은 시간과 분을 구문 분석 할 수 없습니다.

분류에서Dev

"이 파일 유형에 적합한 로더가 필요할 수 있습니다.", webpack은 angular2 파일을 구문 분석 할 수 없습니다.

분류에서Dev

log4j URL 유효하지 않은 문자 Ł를 구문 분석 할 수 없습니다.

분류에서Dev

문자열을 JSON으로 변환 할 수 없습니다. 유효한 JSON에 대한 문자열 및 PHP에서 JSON 구문 분석

분류에서Dev

'-1'값은 'Byte'유형으로 구문 분석 할 수 없습니다.

분류에서Dev

'-1'값은 'Byte'유형으로 구문 분석 할 수 없습니다.

분류에서Dev

RestTemplate에서받은 JSON 응답을 구문 분석 할 수 없습니다.

분류에서Dev

간단한 xml을 사용하여 구문 분석 할 수 없습니다.

분류에서Dev

Android에서 복잡한 JSON 응답을 구문 분석 할 수 없습니다.

분류에서Dev

bllipparser에 대한 구문 분석 셸을 시작할 수 없습니다.

분류에서Dev

Xcode 오류 디버그 맵을 구문 분석 할 수 없습니다. 파일이 유효한 개체 파일로 인식되지 않았습니다.

분류에서Dev

Invoke-Webrequest 호스트 변수, 유효하지 않은 URI : 호스트 이름을 구문 분석 할 수 없습니다.

분류에서Dev

함수의 출력을 구문 분석 할 수 없습니다.

분류에서Dev

Spring Jackson은 JSON 객체를 구문 분석 할 수 없습니다.

분류에서Dev

ANTLR 4는 다른 규칙과 유사한 하나의 규칙을 구문 분석 할 수 없습니다.

분류에서Dev

Pandas로 JSON 파일을 구문 분석 할 수 없습니다.

분류에서Dev

Moshi는 nullable을 구문 분석 할 수 없습니다.

분류에서Dev

HTMLCollection 목록을 구문 분석 할 수 없습니다.

분류에서Dev

ROBLOX Lua에서 JSON을 구문 분석 할 수 없습니다.

분류에서Dev

ROBLOX Lua에서 JSON을 구문 분석 할 수 없습니다.

분류에서Dev

JSON을 구문 분석 할 수 없습니다.

분류에서Dev

JSON을 Javascript 개체로 구문 분석 할 수 없습니다.

분류에서Dev

JQuery가 JSP EL을 구문 분석 할 수 없습니다.

분류에서Dev

SwiftyJSON이 JSON 배열을 구문 분석 할 수 없습니다.

분류에서Dev

YAML을 올바르게 구문 분석 할 수 없습니다.

Related 관련 기사

  1. 1

    유효한 JSON 문자열을 구문 분석 할 수 없습니다.

  2. 2

    Jackson은 List <Long>을 구문 분석 할 수 없습니다.

  3. 3

    복잡한 유형의 속성을 구문 분석 할 수 없습니다.

  4. 4

    typesafe 구성은 변수로 URL을 구문 분석 할 수 없습니다.

  5. 5

    localdate 구문 분석은 시간과 분을 구문 분석 할 수 없습니다.

  6. 6

    "이 파일 유형에 적합한 로더가 필요할 수 있습니다.", webpack은 angular2 파일을 구문 분석 할 수 없습니다.

  7. 7

    log4j URL 유효하지 않은 문자 Ł를 구문 분석 할 수 없습니다.

  8. 8

    문자열을 JSON으로 변환 할 수 없습니다. 유효한 JSON에 대한 문자열 및 PHP에서 JSON 구문 분석

  9. 9

    '-1'값은 'Byte'유형으로 구문 분석 할 수 없습니다.

  10. 10

    '-1'값은 'Byte'유형으로 구문 분석 할 수 없습니다.

  11. 11

    RestTemplate에서받은 JSON 응답을 구문 분석 할 수 없습니다.

  12. 12

    간단한 xml을 사용하여 구문 분석 할 수 없습니다.

  13. 13

    Android에서 복잡한 JSON 응답을 구문 분석 할 수 없습니다.

  14. 14

    bllipparser에 대한 구문 분석 셸을 시작할 수 없습니다.

  15. 15

    Xcode 오류 디버그 맵을 구문 분석 할 수 없습니다. 파일이 유효한 개체 파일로 인식되지 않았습니다.

  16. 16

    Invoke-Webrequest 호스트 변수, 유효하지 않은 URI : 호스트 이름을 구문 분석 할 수 없습니다.

  17. 17

    함수의 출력을 구문 분석 할 수 없습니다.

  18. 18

    Spring Jackson은 JSON 객체를 구문 분석 할 수 없습니다.

  19. 19

    ANTLR 4는 다른 규칙과 유사한 하나의 규칙을 구문 분석 할 수 없습니다.

  20. 20

    Pandas로 JSON 파일을 구문 분석 할 수 없습니다.

  21. 21

    Moshi는 nullable을 구문 분석 할 수 없습니다.

  22. 22

    HTMLCollection 목록을 구문 분석 할 수 없습니다.

  23. 23

    ROBLOX Lua에서 JSON을 구문 분석 할 수 없습니다.

  24. 24

    ROBLOX Lua에서 JSON을 구문 분석 할 수 없습니다.

  25. 25

    JSON을 구문 분석 할 수 없습니다.

  26. 26

    JSON을 Javascript 개체로 구문 분석 할 수 없습니다.

  27. 27

    JQuery가 JSP EL을 구문 분석 할 수 없습니다.

  28. 28

    SwiftyJSON이 JSON 배열을 구문 분석 할 수 없습니다.

  29. 29

    YAML을 올바르게 구문 분석 할 수 없습니다.

뜨겁다태그

보관