принимала pathvariable enum в нижнем регистре. Чтобы писать в урле /api/something/person вместо /api/something/PERSON.
У jackon'а есть настройка, как мне кажется для этого.
Feature that determines if Enum deserialization should be case sensitive or not.
If enabled, Enum deserialization will ignore case, that is, case of incoming String
value and enum id (depending on other settings, either `name()`, `toString()`, or
explicit override) do not need to match.
<p>
Feature is disabled by default.
ACCEPT_CASE_INSENSITIVE_ENUMS(false),
Пустой тест-проект. application.properties:
spring.jackson.mapper.accept-case-insensitive-enums=true
public enum Type {
PERSON, OTHER
}
@RestController ...
@GetMapping("/{type}")
public String sayType(@PathVariable Type type) {
return type.toString();
}
И нифига. /api/something/PERSON работает, /api/something/person - нет *.
Spring Boot 2.2.1 и 2.5.14.
*
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'com.example.jacksonenumcaseinsensitivetest.Type'; nested exception is ...
No enum constant com.example.jacksonenumcaseinsensitivetest.Type.person]
А если для Type определить конструктор со стринговым параметром?чтобы было что-то типа PERSON("person"), может тогда Type построится из pathvariable
Нужен StringToEnumConverter и добавление его в конфиг
Мб где-то обьявляетс Бин objectMapper и в нем надо прописывать
Посмотри мб по стектрейсу какие классы отрабатывают и загугли как их конфигурить
Да там самый банальный веббиндер, как его задачу сделать - 1 строка в Гугле )
Обсуждают сегодня