首页 > 解决方案 > 服务器在 Spring ResponseEntity 中返回 HttpSession 对象时出现 StackOverflow 错误

问题描述

在我的 Spring MVC Rest 控制器方法中,我试图将HttpSession另一个名为 的自定义对象中的对象返回给客户端Token,所有这些对象都在 Spring对象中。ResponseEntity

但是由于某种原因,每当我将对象作为属性包含在我的类中时Stackoverflow,由于一些无限递归的数据绑定问题,我得到了一个错误。 JacksonHttpSessionToken

当对象不在我的班级中时,我没有收到StackOverflow错误消息。HttpSessionToken

这是我的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 ........-

标签: springspring-mvcrecursionjacksonstack-overflow

解决方案


推荐阅读