springmvc controller动态设置content-type

编程知识 更新时间:2023-04-05 06:05:13

  springmvc  RequestMappingHandlerAdapter#invokeHandlerMethod 通过ServletInvocableHandlerMethod#invokeAndHandle调用目标方法,并处理返回值。

  

  如果return value != null,则通过returnvalueHandlers处理,内部会调用MessageConverter转换成相应的报文格式。

  

  HttpOutputMessage outputMessage 对应的实例 是 org.springframework.http.server.ServletServerHttpResponse。

  在写入数据的同时,会设置response的header,包括content-type(根据RequestMapping 的 produces 属性 计算出来)。

  所以,在带有返回值的情况下,在controller中设置content-type是无效的,会被消息转换器覆盖掉。

  

@RequestMapping(value = "xxx", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public String handleKafkaSpecialMessage(HttpServletRequest request, HttpServletResponse response) {
    response.setContentType("application/json");
    return "xxx";
}

  改一下返回值就好了

@RequestMapping(value = "xxx", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public void handleKafkaSpecialMessage(HttpServletRequest request, HttpServletResponse response) {
    response.setContentType("application/json");
    try(OutputStream ros = response.getOutputStream()) {
        IOUtils.write("xxx", ros);
        ros.flush();
    } catch (IOException e) {
    }
}

 

更多推荐

springmvc controller动态设置content-type

本文发布于:2023-04-05 06:05:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a1744e25e6f8dc9528de7cb1d20bb997.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:动态   controller   springmvc   content   type

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 45173文章数
  • 14阅读数
  • 0评论数