服务JSON";原样;从Spring控制器使用内容协商

服务JSON";原样;从Spring控制器使用内容协商,json,spring-mvc,Json,Spring Mvc,在我的webapp中,我的所有消息转换器都已就绪,如果我将下面的getContent更改为返回bean/pojo,它将返回“application/json;charset=UTF-8”,这是预期的,但我现在希望按原样提供json 例如,我有一个简单的存根web服务,用户可以使用它将一块JSON内容放在某个地方,然后通过一个等效的GET调用将其读回 @Controller public class StubController { @Autowired @Qualifier("

在我的webapp中,我的所有消息转换器都已就绪,如果我将下面的getContent更改为返回bean/pojo,它将返回“application/json;charset=UTF-8”,这是预期的,但我现在希望按原样提供json

例如,我有一个简单的存根web服务,用户可以使用它将一块JSON内容放在某个地方,然后通过一个等效的GET调用将其读回

@Controller
public class StubController {

    @Autowired
    @Qualifier("keyValueStore")
    private KVStore kv;

    @RequestMapping(value = "/stub/{id}", method = RequestMethod.GET)
    public @ResponseBody
    String getContent(@PathVariable("id") final String id) {
        return kv.get(id);
    }

    @RequestMapping(value = "/stub/{id}", method = RequestMethod.PUT)
    public String putContent(@PathVariable("id") final String id, @RequestBody String body) {
        kv.set(id, body);
        return "redirect:/stub/"+id;
    }

}
但是,如果我在浏览器中调用,getter将返回标题“contenttype:text/html;charset=UTF-8”。我猜这是因为我没有返回任何被Jackson converter“转换”的内容,因此返回头没有被修改


我需要它是application/json——知道怎么做吗?也许是一个可以用来指定返回头的注释?

我通过向getContent()方法添加一个HttpServletResponse参数并直接设置内容类型,成功地解决了这个问题

    @RequestMapping(value = "/stub/{id}", method = RequestMethod.GET)
    public @ResponseBody String getContent(@PathVariable("id") final String id, HttpServletResponse response) {
        response.setContentType("application/json");
        return kv.get(id);
    }