HTTP Status 500 - Could not write content: could not initialize proxy - no Session


 分析出現no Session錯誤的原因以及給出解決方案:

   使用SpringMVC + JSON數據返回時,經常會出現no Session的錯誤:

  報錯原因:因為懶加載在提取關聯對象的屬性值的時候發現EntityManager已經被關閉,就報no session錯誤。

  控制器類中的方法上添加了@ResporseBody注解,將方法的返回值利用jackson包自動轉化為JSON字符串,然后放入響應消息體中,最后發送到瀏覽器;

  然而jackson包都會自動調用對象的屬性的get方法來獲取屬性的值拼接成JSON字符串,而調用get方法就需要自動發送SQL語句去查詢關聯對象的數據,結果發現EntityManager對象已經關閉了,已經無法在通過EntityManager對象去查詢關聯對象的get方法,所以就會報 no session異常。

 

  解決辦法:讓關閉EntityManager對象的動作延后到提取懶加載對象的數據之后再關閉。

  具體做法:在web.xml中添加一個過濾器OpenEntityManagerInViewFilter,使EntityManager對象的開啟和關閉在視圖層發生。

<!-- 解決no session問題 -->
  <filter>
    <filter-name>noSessionFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>noSessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM