@ResponseBody的作用其实是将java对象转为json格式的数据。 具体说,是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,在使用此注解之后不会再走视图处理器。
@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml格式 或者 json等】封装为对应的 JavaBean 对象,
封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
@RequestMapping("/login.do")
@ResponseBody
public Object login(@RequestBody User loginUuser, HttpSession session) {
user = userService.checkLogin(loginUser);
session.setAttribute("user", user);
return user;
@ResponseBody 作用:
1) 读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析;
2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
application/x-www-form-urlencoded, 可选 @RequestBody @RequestParam @ModelAttribute,最原始的使用request.getParameter(“”)来接收。
multipart/form-data :@RequestBody不支持,因为这种是用来传文件的,后台使用request.getInputStream() 来接收
application/json, application/xml:必须使用@RequestBody来处理
如果类标有@Controller
方法上不加@ResponseBody,是将方法返回的值作为视图名称,并自动匹配视图去显示
方法加上@ResponseBody就仅仅是将方法返回值当作内容直接返回到客户端
@Controller, @RestController的共同点:都是用来表示Spring某个类的是否可以接收HTTP请求。
@Controller, @RestController的不同点:RestController = @Controller + @ResponseBody
@RestController中的方法如果想跳转页面,则用ModelAndView进行封装,如下:
@RestController
public class UserController {
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String toIndex(){
ModelAndView mv = new ModelAndView("index");
return mv;
}