Я разрабатываю приложение с функцией аукциона. Интерфейс находится в Angularjs, а бэкэнд использует JAX-RS на Glassfish 4.JAX-RS ошибка отправки объекта, содержащего массив, в DELETE
У меня есть ситуация, когда я хочу удалить несколько аукционов, которые просматривает пользователь. Я отправляю контейнерный объект на сервер, содержащий массив, в котором указаны аукционы, которые я хочу удалить для этого пользователя.
Однако сервер посылает сообщение об ошибке при отправке этого объекта. Очевидно, что им не нравится, как он получает объект - он, кажется, не правильно переносится с json на объект JAVA.
Это то, как выглядит объект при печати на консоль перед его отправкой из фронтэнда angularJS:
deleteAuctionWatchlistContainer = {"auctionWatchlistDeleteEntries":[{"auction_id":356,"user_id":2},{"auction_id":225,"user_id":2}]}
Это ошибка, которая возвращается. Как вы можете видеть из config возвращает массив, но не объект, содержащий его.
Error trying to delete the auction watchlist entries:
{"data":{"errorCode":500},"status":500,"config":
{"method":"DELETE","transformRequest":[null],"transformResponse":[null],
"auctionWatchlistDeleteEntries":[{"auction_id":356,"user_id":2},{"auction_id":225,"user_id":2}],
"url":"http://localhost:8080/pododdle/webapi/users/2/auctionwatchlist",
"headers":{"Accept":"application/json, text/plain, */*"}},
"statusText":"Internal Server Error"}
Я использовал объекты контейнера раньше, чтобы сделать это, но не могу понять, почему он не работает в этот раз. Я вижу, что ресурс получает правильно, но как только ресурс пытается скрывать json для java-объекта, он выдает ошибку.
Java-модель для контейнера выглядит следующим образом:
@XmlRootElement
public class DeleteAuctionWatchlistsContainer {
private AuctionWatchlistEntry[] auctionWatchlistDeleteEntries;
public DeleteAuctionWatchlistsContainer() {
}
public AuctionWatchlistEntry[] getAuctionWatchlistDeleteEntries() {
return auctionWatchlistDeleteEntries;
}
}
Java-для модели AuctionWatchlistEntry является:
@XmlRootElement
public class AuctionWatchlistEntry {
private int auction_id;
private int user_id;
public AuctionWatchlistEntry() {
}
public int getAuction_id() {
return auction_id;
}
public int getUser_id() {
return user_id;
}
}
Вот ресурс JAX-RS для аукциона список наблюдения удаления:
@DELETE
public Response deleteAuctionWatchlists(DeleteAuctionWatchlistsContainer dAWC)
{
return Response.ok(auctionWatchlistService.deleteAuctionWatchlistEntries(dAWC.getAuctionWatchlistDeleteEntries()).toString()).build();
}
Метод angularjs, который отправляет объект на сервер, находится внутри угловой. Здесь мы вызываем метод службы:
var deleteAuctionWatchlistContainer = { auctionWatchlistDeleteEntries: deleteEntries };
pododdle.deleteAuctionWatchlistEntries(deleteAuctionWatchlistContainer).then(onDeleteAuctionWatchlistEntriesComplete, onDeleteAuctionWatchlistEntriesError);
Вот код метода обслуживания:
var deleteAuctionWatchlistEntries = function(deleteAuctionWatchlistContainer) {
return $http.delete("http://localhost:8080/pododdle/webapi/users/" + currentUser.user_id + "/auctionwatchlist", deleteAuctionWatchlistContainer)
.then(function(response) {
return response.data;
})
};
Все помощь ценится. Пожалуйста, дайте мне знать, если я пропустил что-либо релевантное ...
Вы используете jackson для отображения jaxb аннотаций на json? Вы зарегистрировали поставщика json? Почему DeleteAuctionWatchlistsContainer не имеет аннотации XmlRootElement? Что такое серверный журнал? – pedrofb
Я добавил к XmlRootElement в DeleteAuctionWatchlistContainer - это было отличное место. Но ошибка остается прежней. Ресурс, содержащий метод @DELETE, имеет @Consumes (MediaType.APPLICATION_JSON). Журнал сервера ничего не сообщает. У меня есть System.out.println внутри метода удаления, который печатает, но он ничего не делает, как только он пытается получить доступ к объекту Container .... –