2016-03-11 10 views
5

私は、Ajax投稿を春に使用しようとしています@RestController。ジャクソンはの内に@Json...Reference注釈の問題があり、投稿されたものは(@Inheritance(strategy = InheritanceType.JOINED))から継承されます。カスタムJsonSerializerを正しく登録するには?

私は多くの質問とその回答を見ました。今のところ、親エンティティを永久に変更することはできません。私はローカルコピーにアクセスすることができ、一時的に変更することができるので、親の注釈を削除すると、恐らくそれを修正する可能性があることが確認できました。ですから、私の解決策はカスタムJsonSerializerを実装することです。

問題は、呼び出されないということです。私は私が見たものから正しく作ったと思う。相対コードは次のとおりです。

私はAppConfigファイルに@Beanを登録します。メソッド本体のバリエーションを試しました。これは動作しない最新のものです...

@Bean 
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() { 
    SimpleModule m = new SimpleModule(); 
    m.addSerializer(Orchard.class, new OrchardSerializer()); 
    return new Jackson2ObjectMapperBuilder().modules(m); 
} 

私はシリアライザを提供しています。以下のブレークポイントは、それがアヤックスに呼び出されますJsonSerializer ...

public class OrchardSerializer extends JsonSerializer<Orchard> { 

    @Override 
    public Class<Orchard> handledType() { 
     return Orchard.class; 
    } 

    @Override 
    public void serialize(Orchard orchard, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) 
    throws JsonProcessingException { 
     System.out.println("Break on me..."); 
    } 
} 

私が投稿しようとしているエンティティ...私はカスタムを登録するにはどうすればよい

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@JsonSerialize(using = OrchardSerializer.class) 
public class Orchard extends Yard { 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private List<Person> contacts; 

    @Column(name = "COUNT") 
    private Integer count; 

    ...getters/setters 
} 

をトリガーされることはありません役職?

+0

可能な場合は、カスタムHttpMessageConverterが必要ですか? –

答えて

4

あなたがSpring Bootを使用していないようです。スプリングブートなしのAFAIK Jackson2ObjectMapperBuilderは自動的に検出されません。カスタムシリアライザを追加する場合は、WebMvcConfigurerAdapterで行う必要があります。

@Configuration 
@EnableWebMvc 
public class WebConfiguration extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     SimpleModule m = new SimpleModule(); 
     m.addSerializer(Orchard.class, new OrchardSerializer()); 
     Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder().modules(m); 
     converters.add(new MappingJackson2HttpMessageConverter(builder.build())); 
    } 
} 
関連する問題