我正在尝试将Ajax帖子用于Spring @RestController
。杰克逊在@Json...Reference
内有@Entity
个注释问题,发布者继承自(@Inheritance(strategy = InheritanceType.JOINED)
)。
我已经看到了很多关于这方面的问题和答案。截至目前,不允许永久更改父实体。我确实可以访问,并且可以暂时更改我的本地副本,因此我已经能够确认删除父级中的注释可能会修复它,可能是以破坏其他内容为代价。所以,我的解决方案是实现自定义JsonSerializer
。
问题在于它没有被调用;我想我已经从我所看到的那样做得很好。这是相关代码:
我在@Bean
文件中注册了AppConfig
。我尝试过方法体的变体;这只是最近一个不起作用的......
@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
以便在Ajax帖子上调用它?
答案 0 :(得分:9)
好像你没有使用Spring Boot。不会自动检测到没有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()));
}
}