这是一个老问题,但它几乎是我在网上能找到的关于这个主题的唯一内容。
所以这里是如何做到的。假设您在 Spring 中使用 Jackson 作为 JSON 库。
- 向Michel Krämer 的 bson4jackson 库添加依赖项
- 像这样创建一个类:
import com.fasterxml.jackson.databind.ObjectMapper;
import de.undercouch.bson4jackson.BsonFactory;
import de.undercouch.bson4jackson.BsonGenerator;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import javax.annotation.Nonnull;
public class MappingJackson2BsonHttpMessageConverter
extends AbstractJackson2HttpMessageConverter
{
public MappingJackson2BsonHttpMessageConverter(@Nonnull Jackson2ObjectMapperBuilder builder) {
super(bsonObjectMapper(builder), MediaType.parseMediaType("application/bson"));
}
@Nonnull
private static ObjectMapper bsonObjectMapper(@Nonnull Jackson2ObjectMapperBuilder om){
BsonFactory f = new BsonFactory();
f.configure(BsonGenerator.Feature.ENABLE_STREAMING, true);
return om.factory(f).build();
}
}
- 将其作为 a 添加
@Bean
到您的配置中,或使用注释@Component
并确保它在您@ComponentScan
的路径中。
就是这样。现在,如果您使用@RequestMapping(produces = "application/bson")
(以某种形式)声明您的 MVC 端点,则输出将是您的 ResponseEntity 主体的 BSON 编码。
这适用于通常序列化为 JSON 的带有 Jackson 注释的对象;ObjectMapper
并且您通过 Spring、模块或注释对 Jackson 所做的所有配置都将适用。
它也适用于输入和输出。
它也适用于Feign 客户。我认为它也适用于 Spring 的RestTemplate
.