如何通过Spring @response body发送bson

时间:2013-08-30 04:45:44

标签: json spring annotations response bson

我正在使用@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。是吗?)。

2 个答案:

答案 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库。

  1. Michel Krämer's bson4jackson library添加一个依赖项
  2. 像这样创建一个类:
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();
    }
}

  1. 将其作为@Bean添加到您的配置中,或使用@Component对其进行注释,并确保它位于您的@ComponentScan的路径中。

就是这样。现在,如果您使用@RequestMapping(produces = "application/bson")(以某种形式或另一种形式)声明MVC端点,则输出将为ResponseEntity主体的BSON编码。

这适用于通常会序列化为JSON的带有Jackson注释的对象;并且您通过Spring对Jackson ObjectMapper所做的所有配置,模块或注释都将适用。

它同时适用于输入和输出。

它也可以与Feign clients一起使用。 我认为它也适用于Spring的RestTemplate