Как я могу настроить документацию swagger на использование формата dd / MM / yyyy?

#java #spring-boot #date #swagger

#java #весенняя загрузка #Дата #swagger

Вопрос:

Я анализирую дату в службе rest, используя spring-boot и Swagger для документирования api.

На конечной точке я хочу иметь только даты без часов. И это легко достигается с @DateTimeFormat(pattern = "dd/MM/yyyy") помощью . Обратите внимание, что я предпочитаю, чтобы дни были на первом месте, а не месяцы.

Конечная точка работает нормально при использовании curl, тогда я не думаю, что это проблема. Например, чтобы установить 30 ноября текущего года, я могу вызвать его с помощью Curl следующим образом:

 curl -X GET "http://localhost:8085/app/api/endpoint?creationTime=30/11/2020" -H  "accept: application/json"
  

И работает нормально. Но если я использую непосредственно страницу Swagger для тестирования, у меня возникают такие случаи:

Во-первых, если я установлю дату как 30/11/2020, swagger не позволит мне продолжить:

введите описание изображения здесь

Если я задаю дату как 30.11.2020, swagger позволяет мне продолжить, но я получаю эту ошибку:

 "message": "Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@io.swagger.annotations.ApiParam @org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.util.Date] for value '11/30/2020'; nested exception is org.joda.time.IllegalFieldValueException: Cannot parse "11/30/2020": Value 30 for monthOfYear must be in the range [1,12]",
  

Как я уже говорил, это номер месяца 30. И для меня это имеет смысл.

Если я установлю 05/11/2020, Swagger позволит мне отправить запрос, а окончательная дата — 5 ноября, как и формат, который я определил.

Мне кажется, что swagger фильтрует меня по MM/dd/yyyy формату, а не использует мой dd/MM/yyyy , который действительно определен в конечной точке. Есть ли какая-либо возможность установить проверку swagger как dd/MM/yyyy ?

Примечание: используется версия swagger 2.9.2 . Версия Spring-boot 2.1.8.RELEASE

Ответ №1:

Мы можем использовать swagger ..

 birthday:
    description: Date of birth
    type: date
    format: DD/MM/YYYY
    example: "30/11/2022"
 
  

Для nestjs вы можете использовать

 @ApiProperty({ example: "20-09-2022", type:Date,  default: 'DD/MM/YYYY', format: 'DD/MM/YYYY' })
  

Комментарии:

1. Обратите внимание, что вопрос связан с Java с Spring, а не с node или другими языками.

2. Извините, я не упомянул весеннюю загрузку java, в весенней загрузке это связано с типом даты, измените дату на тип данных LocalDate , он будет работать нормально Пример кода здесь @RequestHeader(обязательно = false) LocalDate StartDate,