执行了业务逻辑逻辑之后,要把程序执行的结果返回给用户,也就是响应。
一、返回静态页面
返回页面是用@Controller而不是用@RestController。(@RestController和@Controller只能加在类上,@RestMappling可加在类和方法上)
java
@Controller
@RequestMapping("/response")
public class ResponseController{
@RequestMapping("/returnHtmlPage")
public String returnHtmlPage(){
return "/hello.html";
}
}
@Target表明注解可以用在哪里。(TYPE表示可以用在类上、METHOD表示可以用在方法上)
@Retention指的注解的作用域。(SOURSE:源码、CLASS:编译、RUNTIME:运行阶段)
@Documented
上述三个注解是源注解,可以用来生成其他注解
@ResponseBody表示返回数据
@Controller -> 返回页面
@RestController = @Controller + @ResponseBody -> 返回数据
二、返回数据@ResponseBody
即是类注解又是方法注解,表示返回数据。加在类上表示该类的所有方法返回的都是数据而不是页面;加在方法上表示该方法返回的是数据,其他方法不受影响。

三、返回HTML代码片段
必须使用@ResponseBody,因为返回的是数据而非视图
java
@ResponseBody
@RequestMapping("/returnHtml")
public String returnHtml(){
return "<h1>returnHtml</h1>";
}

四、返回JSON
后端方法直接返回结果为对象就会自动转为json
java
@ResponseBody
@RequestMapping("/returnJson")
public User returnJson(){
User user = new User();
user.setName("zhangsan");
user.setAge(18);
return user;
}

五、设置状态码
java
@ResponseBody
@RequestMapping("/setStatus")
public User setStatus(HttpServletResponse response){
User user = new User();
user.setName("zhangsan");
user.setAge(18);
response.setStatus(500);
return user;
}
六、设置Header
设置response的header,之前是获取请求里的header
RequestMapping的源码
6.1 设置Content-Type
java
@ResponseBody
@RequestMapping(value = "/setHeader",produces = "application/json")
public String setHeader(){
return "{\"success\":true}";
}
6.2 设置其他header
java
@ResponseBody
@RequestMapping("/setHeader2")
public String setHeader2(HttpServletResponse response){
response.setHeader("myKey","myValue");
return "success";
}
返回String类型,默认是返回text/html
返回对象类型,默认是返回application/json