gpt4 book ai didi

java - 如何正确注册自定义 JsonSerializer?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:17 24 4
gpt4 key购买 nike

我正在尝试使用 Ajax 发布到 Spring @RestController。 Jackson 对 @Entity 中的 @Json...Reference annnotations 有问题,发布的那个继承自 (@Inheritance(strategy = InheritanceType.JOINED)).

我已经看到很多与此相关的问题和答案。截至目前,不允许永久更改父实体。我确实可以访问并可以临时更改我的本地副本,因此我已经能够确认删除父项中的注释可能会修复它,大概是以破坏其他东西为代价的。因此,我的解决方案是实现自定义 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 以便在 Ajax 帖子中调用它?

最佳答案

您似乎没有使用 Spring Boot。没有 Spring Boot 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()));
}
}

关于java - 如何正确注册自定义 JsonSerializer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35948775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com