Невозможно десериализовать тип коллекции в json на уровне ресурсов, однако может десериализовать тип коллекции при отправке xml - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть конечная точка REST, использующая медиа-типы XML и JSON.

@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/create")
@POST
public Response createCart(@Valid @NotNull Cart cart) {
    ...
}

Ниже представлен класс модели:

@Value
@FieldDefaults(makeFinal= false)
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor
@XmlRootElement
public class Cart{

    @XmlElement(name="customerId")
    @NotBlank(message = "customer id cannot be blank")
    private String customerId;

    @XmlElementWrapper(name = "itemList")
    @XmlElement(name="item")
    @NotEmpty(message = "cart should contain at least 1 item")
    private List<@Valid Item> itemList;

}

и XML Запрос:

<cart>
    <customerId>C001</customerId>
    <itemList>
        <item>
            <itemCode>I001</itemCode>
            <quantity>1</quantity>
            <amount>100</amount>
        <item>
        <item>
            <itemCode>I002<itemCode>
            <quantity>2</quantity>
            <amount>200</amount>
        <item>
    </itemList>
</cart>

и JSON Запрос:

{
    "customerId": "C001",
    "itemList":[
        {
            "itemCode": "I001",
            "quantity": 1,
            "amount": 100
        },
        {
            "itemCode": "I002",
            "quantity": 2,
            "amount": 200
        }
    ]
}

К вашему сведению: я зарегистрировал JacksonXMLProvider и JacksonJsonProvider в конфигурации Джерси

Когда я отправляю запрос xml, он успешно десериализуется, но когда я пытаюсь отправить json десериализация не работает, и я получаю сообщение об ошибке: в корзине должен быть хотя бы 1 элемент

Одна вещь, которую я понял, - это когда я удаляю запрос @XmlElementWrapper(name = "itemList") и @XmlElement(name="item") json, который идеально подходит для десериализации. Но после выполнения этого изменения обработка запроса XML перестает работать.

Могу ли я узнать, где я делаю неправильно?

...