HttpServletResponse 和 @ResponseBody 注解都是Spring MVC中用于处理HTTP响应
的工具,它们之间的区别在于作用范围和用法。
-
HttpServletResponse 是
Servlet API中的类
,用于设置HTTP响应的内容和头部信息。在Spring MVC中,可以在Controller方法中通过HttpServletResponse 对象设置响应的内容、状态码、头部信息
等。通过 HttpServletResponse 可以直接控制HTTP响应的各个方面。 -
@ResponseBody
注解用于将方法的返回值直接写入HTTP响应体中
。当一个方法被标记为 @ResponseBody 时,Spring MVC会将方法的返回值序列化为JSON、XML等格式,并将其写入HTTP响应体中。这样可以方便地返回数据给客户端,而无需手动设置响应的内容类型和编码。
代码如下:
@RestController
public class ExampleController {
@GetMapping("/example1")
public void handleHttpResponse(HttpServletResponse response) throws IOException {
response.setContentType("text/plain");
response.getWriter().write("Hello, this is a response from HttpServletResponse");
}
@GetMapping("/example2")
@ResponseBody
public String handleResponseBody() {
return "Hello, this is a response from @ResponseBody";
}
}
在上面代码中, handleHttpResponse 方法使用 HttpServletResponse 对象设置响应的内容类型为"text/plain",并通过 getWriter() 方法写入响应内容。而 handleResponseBody 方法使用 @ResponseBody 注解将返回的字符串直接写入HTTP响应体中。 HttpServletResponse 更适合需要对响应进行更细粒度控制的情况,而 @ResponseBody 则更适合简单地返回数据给客户端。