Пытаюсь создать почтовый веб-сервис REST с телом запроса.
Использование чванства и трикотажа для одного и того же.
Я определил следующее для одного из атрибутов Тела: (надуманный пример)
petType:
description: Type of Pet
type: string
enum:
- CAT
- DOG
Я хотел бы выдать исключение http 400 в случае входящего запроса, не содержащего CAT или DOG.
Однако у меня никогда не было возможности обработать данные и выдать Http 400.
Вместо этого в Почтальоне я получаю HTTP 500.
Stacktrace:
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type au.com.xyz.PetRequest$PetTypeEnum from String "DONKEY": value not one of declared Enum instance names: [CAT, DOG] at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@12b7aa1a; line: 4, column: 14] (through reference chain: au.com.xyz.PetPromoRequest["petType"])
at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:74)
at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1410)
at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:926)
at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:189)
at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:126)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:104)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1583)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:964)
Похоже, что даже прежде, чем я получу возможность проверить, что Джексон / Сваггер / Джерси занимаются чем-то, чего я в идеале не хочу!
Есть мысли, пожалуйста?
UPDATE:
Исходя из ответа Наташа попробовала следующее и все равно не работает
вариант # 1
Добавлена аннотация @Priority в маппере исключений:
@Provider
@Priority(1)
public class AppExceptionMapper implements ExceptionMapper<AppException> {
Это не сработало.
вариант # 2
Добавлено следующее в web.xml:
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.disableAutoDiscovery</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Я получаю одно и то же исключение:
Причина: com.fasterxml.jackson.databind.exc.InvalidFormatException: Невозможно десериализовать значение типа au.com.xyz.PetRequest $ PetTypeEnum из строки «DONKEY»: значение не одно из объявленных имен экземпляров Enum: [CAT , СОБАКА] в [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@12b7aa1a; строка: 4, столбец: 14] (через цепочку ссылок: au.com.xyz.PetPromoRequest ["petType"])
в com.fasterxml.jackson.databind.exc.InvalidFormatException.from (InvalidFormatException.java:74)
на com.f