2016-03-11 27 views
5

Ajax yayınlarını Spring @RestController ürününe kullanmaya çalışıyorum. Jackson'ın, (@Inheritance(strategy = InheritanceType.JOINED)) adresinden gönderilen bir @Entity içine @Json...Reference ek açıklamaları ile ilgili sorunları vardır.Özel bir JsonSerializer düzgün bir şekilde nasıl kaydedilir?

Bu konuyla ilgili birçok soru ve cevap gördüm. Şu an itibariyle, ana öğeyi kalıcı olarak değiştirmeye izin verilmiyor. Yerel kopyasına erişimim var ve geçici olarak değiştirebiliyorum, böylece ebeveynin içindeki ek açıklamaların kaldırılmasının, muhtemelen başka bir şeyi kırma pahasına potansiyel olarak düzeltebileceğini doğrulayabiliyorum. Yani, benim çözümüm özel bir JsonSerializer uygulamaktır.

Sorun şu ki; Sanırım gördüklerimden doğru bir şekilde yaptım. İşte göreceli kod:

AppConfig dosyamda @Bean dosyasını kaydediyorum. Yöntem gövdesi için varyasyonları denedim; Bu, çalışmayan en yeni biridir ...

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

Diziselleştiriciyi sağlıyorum; Aşağıdaki kırılma noktası yüzden bir Ajax çağrılacak 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..."); 
    } 
} 

ben göndermek için çalışıyorum varlık ... Ben özel bir kayıt nasıl

@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 
} 

tetiklenir asla sonrası?

+0

Olası, özel HttpMessageConverter mi ihtiyacınız var? –

cevap

4

Görünüşe göre Spring Boot kullanmıyorsunuz. Spring Boot Jackson2ObjectMapperBuilder olmadan AFAIK otomatik olarak algılanmaz. Özel bir seri hale getirici eklemek isterseniz, WebMvcConfigurerAdapter'da yapmalısınız.

@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())); 
    } 
} 
İlgili konular