gpt4 book ai didi

java - Spring 启动2.2.2 : Jackson serializer for custom pagination doesn't work

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:31 25 4
gpt4 key购买 nike

自 SpringBoot 2.2.2 起,使用 Jackson (2.10.1) 的自定义分页序列化程序不起作用,并且在序列化时不会执行。

/**
* This class allows to specify configuration related to the Web MVC part.
*/
@Configuration
public class WebConfiguration implements WebMvcConfigurer {

private static final String JSON_DATA_PROPERTY = "data";

/**
* Allows to configure a {@link JsonSerializer} for pagination.
*
* @return an instance of {@link Module}.
*/
@SuppressWarnings("rawtypes")
@Bean
public Module springDataPageModule() {
return new SimpleModule().addSerializer(Page.class, new JsonSerializer<Page>() {
@Override
public void serialize(final Page page, final JsonGenerator jsonGenerator,
final SerializerProvider serializers) throws IOException {

jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField(JSON_DATA_PROPERTY, page.getContent());
jsonGenerator.writeObjectFieldStart("paging");
jsonGenerator.writeNumberField("page", page.getNumber() + 1);
jsonGenerator.writeNumberField("totalPages", page.getTotalPages());
jsonGenerator.writeNumberField("totalElements", page.getTotalElements());
jsonGenerator.writeNumberField("perPage", page.getSize());
jsonGenerator.writeEndObject();
jsonGenerator.writeEndObject();
}
});
}
...
}

在 SpringBoot 2.2.1 中,此自定义分页序列化程序已应用并正常工作。你能看到这个问题吗?

最佳答案

自 SpringBoot 2.2.2 以来,该行为已发生变化。您必须完成模块的注册

/**
* This class allows to specify configuration related to the Web MVC part.
*/
@Configuration
public class WebConfiguration implements WebMvcConfigurer {

private static final String JSON_DATA_PROPERTY = "data";

/**
* Allows to configure a {@link JsonSerializer} for pagination.
*
* @return an instance of {@link Module}.
*/
private Module preparePageModule() {
return new SimpleModule().addSerializer(Page.class, new JsonSerializer<>() {
@Override
public void serialize(@SuppressWarnings("rawtypes") final Page page, final JsonGenerator jsonGenerator,
final SerializerProvider serializers) throws IOException {

jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField(JSON_DATA_PROPERTY, page.getContent());
jsonGenerator.writeObjectFieldStart("paging");
jsonGenerator.writeNumberField("page", page.getNumber() + 1);
jsonGenerator.writeNumberField("totalPages", page.getTotalPages());
jsonGenerator.writeNumberField("totalElements", page.getTotalElements());
jsonGenerator.writeNumberField("perPage", page.getSize());
jsonGenerator.writeEndObject();
jsonGenerator.writeEndObject();
}
});
}

/**
* Allows to configure the Jackson object mapper.
*
* @param objectMapper
* an instance of {@link ObjectMapper}.
*/
@Autowired
public void configureJacksonObjectMapper(final ObjectMapper objectMapper) {
...
objectMapper.registerModule(preparePageModule());
}
...
}
`

关于java - Spring 启动2.2.2 : Jackson serializer for custom pagination doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59399886/

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