2017-01-11 6 views
1

私はオブジェクトマッパーでfasterxml JSONを使用し、以下の私のコードでいます:Spring Hibernateプロジェクトのjson jacksonの "handler":{}、 "hibernateLazyInitializer":{}を無視する方法は?

ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 
     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

     try { 
      String jsonInString = mapper.writeValueAsString(myClassObjectHere); 
      return new ResponseEntity<String>(jsonInString, HttpStatus.OK); 
     } catch (JsonProcessingException e) { 
      e.printStackTrace(); 
      return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR); 
     } 

私が実装しているとのコードを使用しています方法、私は、所望の出力を得るが、JSONは、などの特定のJSONオブジェクトに2ランダムな奇妙な値を持っています次の:

"listing": { 
      "listingId": 1, 
      "name": "Business", 
      "handler": {}, 
      "hibernateLazyInitializer": {} 
     }, 
     "handler": {}, 
     "hibernateLazyInitializer": {} 
     }, 

どのように出力されたJSONから"handler": {}, "hibernateLazyInitializer": {}値を無視するobjectmappper設定するには?

私は下のソリューションを試してみました:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

しかし、そのは動作していないと、出力はまだ私は上記の投稿と同じです。 また、私はこれらのハンドラとjsonのhibernateLazyInitializerを、@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})のクラスに注釈を付けることで無視できることを知っていますが、json jacksonオブジェクトマッパーをグローバルに設定する手段はありません。

+0

は、代わりにobjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES、偽)のDeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIESを使用してみてください。 – Boldbayar

+0

どのバージョンのjacksonを使用していますか?特集はジャクソン1.9バージョン以下のため – Boldbayar

+0

は、私はこのエラーを取得します –

答えて

0

"handler": {}, "hibernateLazyInitializer": {}のように見えますが、プロパティは空またはnullです。次の構成を使用して、空または空のプロパティを無視できます。

mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); 
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 

それとも、クラスへのアクセスが@JsonIgnorehandlerhibernateLazyInitializerに注釈を付けている場合、これはそれが世界的に直列化されることから防ぐことができます。

+0

私はクラスにアクセスすることができますが、私の質問で言及したように、私はクラスの多くでそれをしなければならないので、その注釈をクラスで使用したくありません。 –

+0

'mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); ' 私のために働いていませんでした。 –

2

が、私はちょうど同じ問題に遭遇したと休止状態のエンティティがマッパーにHibernate4Moduleを追加することで、正しくマッピングされますグローバルへの道を見つけた:

objectMapper.registerModule(
    new Hibernate4Module().configure(
     Hibernate4Module.Feature.FORCE_LAZY_LOADING, true)); 
+0

私はすでにこれを持っていますが、動作しません。 は、以下の私のコードである: 'パブリックHibernateAwareObjectMapper(){ \t \t Hibernate5Moduleモジュール=新しいHibernate5Module()。 \t \t module.enable(Hibernate5Module.Feature。FORCE_LAZY_LOADING); \t \t module.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION); registerModule(module); } ' –

0

あなたはObject.classをにミックスインを追加してみてください:

public ObjectMapper getObjectMapper() { 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.addMixIn(Object.class, IgnoreHibernatePropertiesInJackson.class); 
    return mapper; 
} 

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 
private abstract class IgnoreHibernatePropertiesInJackson{ } 
関連する問題