Ошибка StackOverflow, когда сервер возвращает объект HttpSession в Spring ResponseEntity - PullRequest
0 голосов
/ 01 июня 2018

В моем методе контроллера Spring MVC Rest я пытаюсь вернуть объект HttpSession в другом пользовательском объекте с именем Token, который находится внутри объекта Spring ResponseEntity, обратно клиенту.

Но по какой-то причине я получаю ошибку Stackoverflow из-за некоторой бесконечно рекурсивной проблемы Jackson привязки данных, всякий раз, когда я включаю объект HttpSession в качестве атрибута в мой Tokenучебный класс.

Я не получаю ошибку StackOverflow, когда HttpSession объект не в моем Token классе.

ВотМой Token класс:

public class Token implements Serializable {
   private static final long serialVersionUID = 1L; 
   private HttpSession session;
   private  String value;
   public Token () {}
   public Token (HttpSession session, String value) {
      this.session = session;
      this.value = value;
   }
   public String getValue() {
      return value;
   }
   public void setValue(String value) {
      this.value = value;
   }
   public HttpSession getSession() {
      return session;
   }
   public void setSession(HttpSession session) {
      this.session = session;
   }
}

Вот мой метод контроллера:

@RequestMapping(value = "/getData", method = RequestMethod.GET)
public ResponseEntity<Token> getData(HttpServletRequest request) {
    HttpSession session = request.getSession();
    Token t = new Token(session, "value");
    return new ResponseEntity<Token>(t, HttpStatus.OK);
}

Кто-нибудь знает, почему это так?

Вот трассировка стека:

Root cause of ServletException. org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: weblogic.servlet.internal.WebAppServletContext["securityContext"]->weblogic.servlet.internal.ServletSecurityContextImpl["servletContext"]............... com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) at ........-

...