我正在使用@Responsebody String发送JSON。 我的部分代码如下。(我很抱歉打开它)
@RequestMapping(value = "/getSomeList", method = RequestMethod.GET ,
headers="Accept=application/json", produces = "text/plain;charset=UTF-8")
public @ResponseBody String getThumbList(
@RequestParam("con_id") String con_id) throws Exception{
return json;
}
实际上它发送了Json。但我的客户要求Bson类型。如何在不编辑全局格式的情况下将Json更改为Bson(我的json实际上只是字符串,我听说spring无法响应bson。是吗?)。
答案 0 :(得分:1)
您需要注册一个可以转换为BSON的HttpMessageConverter
。
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="MyBsonHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
不幸的是Spring没有Bson Http Message Converter,所以你必须实现自己的。 (或者当谷歌换一个时,我有更多的运气)。
答案 1 :(得分:1)
这是一个古老的问题,但这几乎是我在网上可以找到的关于该主题的唯一内容。
所以这是操作方法。 假设您在Spring中将Jackson用作JSON库。
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();
}
}
@Bean
添加到您的配置中,或使用@Component
对其进行注释,并确保它位于您的@ComponentScan
的路径中。就是这样。现在,如果您使用@RequestMapping(produces = "application/bson")
(以某种形式或另一种形式)声明MVC端点,则输出将为ResponseEntity主体的BSON编码。
这适用于通常会序列化为JSON的带有Jackson注释的对象;并且您通过Spring对Jackson ObjectMapper
所做的所有配置,模块或注释都将适用。
它同时适用于输入和输出。
它也可以与Feign clients一起使用。
我认为它也适用于Spring的RestTemplate
。