2016-03-11 8 views
5

मैं एक वसंत @RestController पर अजाक्स पोस्ट का उपयोग करने की कोशिश कर रहा हूं। @Entity के अंदर जैक्सन के पास @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); 
} 

मैं धारावाहिक प्रदान करता हूं; नीचे तोड़ने बिंदु शुरू हो रहा कभी नहीं रहा है ...

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 
} 

मैं एक कस्टम पंजीकरण कैसे करते JsonSerializer तो यह एक अजाक्स पर बुलाया जाएगा पद?

+0

संभव है, आपको कस्टम HttpMessageConverter की आवश्यकता है? –

उत्तर

4

ऐसा लगता है कि आप स्प्रिंग बूट का उपयोग नहीं कर रहे हैं। स्प्रिंग बूट Jackson2ObjectMapperBuilder के बिना AFAIK स्वचालित रूप से नहीं पता चला है। यदि आप कस्टम सीरिएलाइज़र जोड़ना चाहते हैं तो आपको इसे 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())); 
    } 
} 
संबंधित मुद्दे