添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: could not initialize proxy - no Session org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: could not initialize proxy - no Session vladimiry opened this issue Oct 4, 2012 · 1 comment spring-data-jpa 1.1.0.RELEASE
hibernate 4.1.7.Final
jackson-module-hibernate 2.0.2 (2.0.0 also tryed)

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->smind.core.domain.ContentLink["tags"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->smind.core.domain.ContentLink["tags"])
    org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.writeInternal(MappingJackson2HttpMessageConverter.java:196)
    org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:179)
    org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:149)
    org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:90)
    org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:157)
    org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:717)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:660)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:804)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:770)

Initialize (Java Config):

    @Bean
    public AnnotationMethodHandlerAdapter adapter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new HibernateAwareObjectMapper());
        AnnotationMethodHandlerAdapter adapter = new AnnotationMethodHandlerAdapter();
        adapter.setMessageConverters(new HttpMessageConverter[] { converter });
        return adapter;

HibernateAwareObjectMapper:

package smind.web.rest.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;
public class HibernateAwareObjectMapper extends ObjectMapper {
    public HibernateAwareObjectMapper() {
        Hibernate4Module hm = new Hibernate4Module();
        hm.configure(Hibernate4Module.Feature.FORCE_LAZY_LOADING, false);
        registerModule(hm);
        configure(SerializationFeature.INDENT_OUTPUT, true);

ContentLink:

package smind.core.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
@Entity
public class ContentLink extends AbstractContent {
    private static final long serialVersionUID = -6690443064244655726L;
    private String note;
    private String url;
    public ContentLink() {
        super();
    @Column(length = 2048)
    public String getNote() {
        return note;
    @Column(length = 8192, nullable = false)
    public String getUrl() {
        return url;
    public void setNote(String note) {
        this.note = note;
    public void setUrl(String url) {
        this.url = url;

AbstractContent ("tags" marked as "lazy"):

package smind.core.domain;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AbstractContent extends AbstractDomain {
    private static final long serialVersionUID = 5533781610346361703L;
    private List tags;
    private String title;
    private User user;
    @ManyToMany(mappedBy = "contents", fetch = FetchType.LAZY)
    public List getTags() {
        return tags;
    @Column(length = 512, nullable = false)
    public String getTitle() {
        return title;
    @ManyToOne(fetch = FetchType.LAZY)
    public User getUser() {
        return user;
    public void setTags(List tags) {
        this.tags = tags;
    public void setTitle(String title) {
        this.title = title;
    public void setUser(User user) {
        this.user = user;
          

It's my fault, I incorrectly registered message converter (Hibernate4Module in java configuration), correct registration is shown below:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "smind.web.rest" })
@PropertySource("classpath:/spring/spring-web-rest.properties")
public class WebRestConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List> converters) {
        super.configureMessageConverters(converters);
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new HibernateAwareObjectMapper());
        converters.add(converter);

Necessary to extend "WebMvcConfigurerAdapter" and then register own message converter in overrided "configureMessageConverters" method.