做项目中用到,有所疑惑的点
多了这个@ResponseBody和没加有什么区别?
解释
-
不加@ResponseBody(默认视图解析)
- 返回值类型是逻辑视图名(String类型)或 ModelAndView对象
- 例子
less
@Controller
@RequestMapping("/old")
public class OldController {
@GetMapping("/page")
public String showPage(Model model) {
model.addAttribute("message", "Hello World");
return "page"; // 返回视图名称,由视图解析器解析为/WEB-INF/views/page.jsp
}
}
结果:Spring会通过视图解析器查找对应的JSP/Thymeleaf等视图模板进行渲染
- 加了@ResponseBody(直接写入响应体)
- 返回值类型:任意类型(自动根据内容协商转换)
less
@Controller
@RequestMapping("/api")
public class ApiController {
@ResponseBody
@GetMapping("/data")
public Map<String, Object> getData() {
return Map.of("status", "success", "code", 200);
}
}
-
结果:
- 自动使用
HttpMessageConverter
进行序列化(JSON/XML 等) - 示例响应头:
Content-Type: application/json
- 响应体:
{"status":"success","code":200}
- 自动使用