У меня есть конечная точка 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 перестает работать.
Могу ли я узнать, где я делаю неправильно?