Spring rest контроллер удаляет знак плюс из zonedatetime в параметре запроса - PullRequest
1 голос
/ 27 апреля 2020

У меня есть UT, который успешно прошел

    @Test
    public void test() {
        String text1 = "2009-07-10T14:30:01.001Z";
        String text2 = "2009-07-10T14:30:01.001+03:00";
        DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ");

        ZonedDateTime zonedDateTime1 = ZonedDateTime.parse(text1, f);
        ZonedDateTime zonedDateTime2 = ZonedDateTime.parse(text2, f);

        System.out.println(zonedDateTime1);
        System.out.println(zonedDateTime2);
    }

Вывод

2009-07-10T14:30:01.001Z
2009-07-10T14:30:01.001+03:00

Но, когда я пытаюсь использовать этот шаблон на контроллере пружины

    @GetMapping
    public ResponseEntity get( @RequestParam("start") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")
                                               ZonedDateTime start) {
        Dto result = service.get(start);
        return new ResponseEntity(result, getHeaders(), HttpStatus.OK);
    }

Это работает только когда я передаю Z вместо часового пояса, например

2009-07-10T14:30:01.001Z

Но при попытке передать смещение часового пояса - появляется сообщение об ошибке

"Не удалось преобразовать значение типа 'java .lang.String' в требуемый тип 'java .time.ZonedDateTime'; вложенным исключением является org.springframework.core.convert.ConversionFailedException: не удалось преобразовать из типа [java .lang.String ] введите [@ org.springframework.web.bind.annotation.RequestParam @ org.springframework.format.annotation.DateTimeFormat java .time.ZonedDateTime] для значения '2009-07-10T14: 30: 01.001 03:00' ; вложенное исключение: java .lang.IllegalArgumentException: попытка разбора не удалась для значения [2009-07-10T14: 30: 01.001 03:00] ",

Я пытаюсь передать запрос почтальоном, например это

POST localhost:9080/MyApp/user?start=2009-07-10T14:30:01.001+03:00
header: Content-Type application/json

1 Ответ

2 голосов
/ 27 апреля 2020

Вы должны кодировать url , когда у вас есть специальные символы, такие как знак плюс (+)

POST localhost:9080/MyApp/user?start=2009-07-10T14:30:01.001%2B03:00
...