Java 如何正确注册自定义JsonSerializer?
我正在尝试使用Ajax发布到SpringJava 如何正确注册自定义JsonSerializer?,java,json,spring,spring-mvc,jackson,Java,Json,Spring,Spring Mvc,Jackson,我正在尝试使用Ajax发布到Spring@RestController。Jackson在发布的实体继承自(@heritance(strategy=InheritanceType.JOINED))的@实体内的@Json…Reference注释方面存在问题 我已经看到了很多关于这方面的问题和答案。目前,不允许永久更改父实体。我确实可以访问本地副本,并且可以临时更改本地副本,因此我能够确认删除父副本中的注释可能会修复它,大概是以破坏其他内容为代价的。因此,我的解决方案是实现一个定制的JsonSeria
@RestController
。Jackson在发布的实体继承自(@heritance(strategy=InheritanceType.JOINED)
)的@实体内的@Json…Reference
注释方面存在问题
我已经看到了很多关于这方面的问题和答案。目前,不允许永久更改父实体。我确实可以访问本地副本,并且可以临时更改本地副本,因此我能够确认删除父副本中的注释可能会修复它,大概是以破坏其他内容为代价的。因此,我的解决方案是实现一个定制的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...");
}
}
公共类OrchardSerializer扩展JsonSerializer{
@凌驾
公共类handledType(){
返回Orchard.class;
}
@凌驾
公共无效序列化(Orchard Orchard、JsonGenerator、JsonGenerator、SerializerProvider SerializerProvider)
抛出JsonProcessingException{
System.out.println(“打断我…”);
}
}
我试图发布的实体
@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
}
@实体
@继承(策略=InheritanceType.JOINED)
@JsonSerialize(使用=OrchardSerializer.class)
公营果园{
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
私人名单联系人;
@列(name=“COUNT”)
私有整数计数;
…能手/二传手
}
如何注册自定义的JsonSerializer
,以便在Ajax帖子中调用它?看起来您没有使用Spring Boot。不带弹簧靴的AFAIKJackson2ObjectMapperBuilder
不会自动检测到。如果要添加自定义序列化程序,应在WebMVCConfigureAdapter
中进行
@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()));
}
}
@配置
@EnableWebMvc
公共类网络配置扩展了WebMVCConfigureAdapter{
@凌驾
public void configureMessageConverters(列表可能,您需要定制的HttpMessageConverter?谢谢,在我尝试的所有解决方案中,这是一个将工作推到极致的解决方案。