Failed to load resource: the server responded with a status of 400 () Ошибка при возврате json объекта со scope session

151
11 мая 2019, 11:30

Это делаю в первый раз, так что скорее всего явно где-то ошибся. Помогите пожалуйста. Пишу приложение на java, Spring, jQuery(ajax). Делаю корзину и дали задание класть данные о заказе в сессию. Есть класс Basket поля которого подходят для корзины, имеет одну связь one-to-many и одну many-to-one, конфигурация в spring(м.б. неверно):

  <bean id="basket" class="com.Basket" scope="session">
        <aop:scoped-proxy/>
  </bean>

когда делаю запрос возвращает ошибку Failed to load resource: the server responded with a status of 400 () при этом в console рисует нужный json:

$(document).ready(function() {
        $.ajax({
            type: 'GET',
            url: '/basket',
            contentType: 'application/json; charset = utf-8',
            dataType : 'json',
            success: function (data) {
                console.log(JSON.stringify(data));
                alert('success');
            },
            error: function (data) {
                console.log(JSON.stringify(data));
                alert('error');
            }
        });
    });

в контроллере:

@Autowired
public Basket basket;
@RequestMapping(value="/basket", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody Basket getBasket() {
        ...
        return basket;
    }

Если возвращаю любой другой объект то код работает как надо. Возможно проблема в самой конфигурации, как правильно класть в сессию в таких случаях или может быть ошибка в другом, буду рад любой помощи.

Ошибка в браузере: Failed to load resource: the server responded with a status of 400 (Bad Request)

В логах:

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
SEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) 

Классы POJO:

public class Basket {
    private int id;
    ...
    private User user; //many-to-one
    private List<Toys> toys; //one-to-many
    }
public class User{
    private int id;
   ...
   private List<Basket>baskets;
}
public class Toys{
    private int id;
    ...
    private Basket basket;
}
Answer 1

У тебя есть явные циклические зависимости между указанными бинами. Basket хранит в себе User, а User хранит в себе Basket. Такая же ситуация с Toys и Basket. Тебе стоит перепроектировать иерархию связей. Или же, можно сделать подсказать Jackson'у, что некоторые поля не стоит сериализовать (тут надо учесть момент, что их не будет в результатирующем JSON) при помощи JsonIgnore примерно так:

public class Basket {
    private int id;
    ...
    private User user; //many-to-one
    private List<Toys> toys; //one-to-many
    }
public class User{
    private int id;
   ...
    @JsonIgnore
   private List<Basket>baskets;
}
public class Toys{
    private int id;
    ...
    @JsonIgnore
    private Basket basket;
}

Есть и другие способы в виде разного рода умных ссылок и т.д., но я рекомендую именно избавиться от циклических связей

READ ALSO
java.lang.LinkageError

java.lang.LinkageError

Подскажите пожалуйста кто сталкивался такой ошибкой в чем может быть проблема?

190
наложение полоски на фотo CSS [закрыт]

наложение полоски на фотo CSS [закрыт]

Помогите наложить полоску на фото, но так чтобы справа полоска обрезала фото

133
Как сделать чтобы работал Ecmascript 6 import, export?

Как сделать чтобы работал Ecmascript 6 import, export?

В браузер где использую скрипт с import export операторами выводит ошибку

168
Ошибка E403 при публикации пакета npm

Ошибка E403 при публикации пакета npm

Не могу опубликовать пакет командой

161