2016-05-26 71 views
-1

當我嘗試使用的RESTEasy我得到下面的異常檢索數據:的RESTEasy與傑克遜導致序列化JsonMappingException

造成的:org.codehaus.jackson.map.JsonMappingException:發現 類沒有 串行組織.hibernate.proxy.pojo.javassist.JavassistLazyInitializer和無 性質發現創建BeanSerializer(以避免異常, 禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))(通過參考 鏈: les.core.modules.profile.Profile [」電子郵件「] - > org.hibernate.collection.internal.PersistentSet [0] - > mappi ng.social.employee.email.Email [ 「狀態」] - > mapping.system.enums.DataState _ $$ _ javassist_172 [ 「處理程序」])

我看着在互聯網上發現,這是因爲傑克遜試圖序列化尚未加載的數據。我發現某處有可能使用這樣的配置傑克遜禁用例外:

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.SerializationFeature; 
import org.codehaus.jackson.jaxrs.JacksonJsonProvider; 

public class JacksonConfig extends JacksonJsonProvider { 
    public JacksonConfig() { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); 
//  setMapper(mapper); 
    } 
} 

但我不知道如何使它工作,我的意思是,應該如何方法setMapper是什麼樣子?我不使用Spring。我也嘗試用以下註解'電子郵件'類

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 

它沒有幫助。我不想批註'@JsonProperty'左右的每個getter,我真的想要使用config類來禁用這個異常。

這裏是我的依賴關係:

<dependencies> 
     <dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-jaxrs</artifactId> 
      <version>3.0.4.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-jackson-provider</artifactId> 
      <version>3.0.4.Final</version> 
     </dependency> 
</dependencies> 
+0

你爲什麼不選擇正確的答案 – ACV

回答

1

由於的RESTEasy是個JAX-RS的實現,您可以使用自定義傑克遜的ObjectMapper的JAX-RS方式:

import javax.ws.rs.ext.ContextResolver; 
import javax.ws.rs.ext.Provider; 

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.SerializationFeature; 

/** 
* ContextResolver that automatically configures and provides {@link ObjectMapper} used by Jackson. 
*/ 
@Provider 
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> { 

    private final ObjectMapper objectMapper = new ObjectMapper() 
      .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); 

    @Override 
    public ObjectMapper getContext(Class<?> type) { 
     return objectMapper; 
    } 
} 
+0

這是F * ING真棒 – ACV