在不使用HttpServletResponse的情况下设置响应内容类型

时间:2012-01-19 14:50:23

标签: spring-mvc content-type

如何在我的spring控制器的方法中获取HttpServletResponse object,以便我的应用程序与Http API保持松散耦合?

...谢谢

编辑:实际上我想要的是在我的控制器中设置HttpServletResponse对象的 ContentType 。春天是否为此提供了任何方法,而没有将HttpServletResponse对象作为控制器方法中的参数?

3 个答案:

答案 0 :(得分:8)

我可以看到两个选项:

如果您想要的内容类型是静态的,那么您可以将其添加到@RequestMapping,例如

@RequestMapping(value="...", produces="text/plain")

这仅在HTTP请求在其Accept标头中包含相同内容类型时才有效。请参阅16.3.2.5 Producible Media Types

或者,使用ResponseEntity,例如

@RequestMapping("/something")
public ResponseEntity<String> handle() {
  HttpHeaders responseHeaders = new HttpHeaders();
  responseHeaders.setContentType(new MediaType("text", "plain"));
  return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

MediaType还有一些常见的mime类型定义为常量,例如MediaType.TEXT_PLAIN

请参阅16.3.3.6 Using HttpEntity<?>

答案 1 :(得分:1)

将其作为参数传递,例如

@RequestMapping( value="/test", method = RequestMethod.GET )
public void test( HttpServletResponse response ) { ... }

答案 2 :(得分:0)

我认为处理此问题的最佳方法是使用特定的View-Implementation,因为此处应该进行响应呈现。