1. 请求映射
• 以前:/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户
• 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户
• 核心Filter;HiddenHttpMethodFilter
• 用法: 表单method=post,隐藏域 _method=put
• SpringBoot中手动开启

测试REST风格;x`
<form action="/user" method="get">
    <input value="REST-GET 提交" type="submit"/>
</form>
<form action="/user" method="post">
    <input value="REST-POST 提交" type="submit"/>
</form>
<form action="/user" method="post">
    <input name="_method" type="hidden" value="delete"/>
    <input name="_m" type="hidden" value="delete"/>
    <input value="REST-DELETE 提交" type="submit"/>
</form>
<form action="/user" method="post">
    <input name="_method" type="hidden" value="PUT"/>
    <input value="REST-PUT 提交" type="submit"/>
</form>
<hr/>

@ResponseBody注解将java对象转为json数据格式

@GetMapping("/test/person")///test/person?format=json\xml---设置响应是json还是xml
    @ResponseBody//利用返回值处理器中的消息转换器进行处理。不进行跳转页面直接处理
    // @ResponseBody注解的作用是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据或者是XML
    public Person getPerson(){
        Person person=new Person();
        person.setAge(10);
        person.setUserName("zhangsan");
        person.setBirth(new Date());
        return person;
    }

springboot restcontroller 统一响应 springboot @responsebody_REST


springboot restcontroller 统一响应 springboot @responsebody_xml_02


要是转换为json数据格式就要牵扯到内容协商,先设置yaml,如下

spring:
  mvc:
    contentnegotiation:
      favor-parameter: true

开启基于请求参数的共同协商。http://localhost:8080/test/person?format=json\xml 将format后面的值改为xml或json返回值就是xml或json

springboot restcontroller 统一响应 springboot @responsebody_REST_03


2. @ResponseBody

@ResponseBody 注解的作用是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据或者是XML也就是如果若返回json、xml等内容到页面,则需要加@ResponseBody注解

springboot restcontroller 统一响应 springboot @responsebody_REST_04


@ResponseBod可以已加到类上,下面方法中就不用单独加@ResponseBody了

springboot restcontroller 统一响应 springboot @responsebody_REST_05

@GetMapping("/test/person")///test/person?format=json\xml
    public Person getPerson(){
        Person person=new Person();
        person.setAge(10);
        person.setUserName("zhangsan");
        person.setBirth(new Date());
        return person;
    }

3. @RestController注解

  1. @RestController注解相当于@ResponseBody + @Controller合在一起的作用。
    使用@RestController注解Controller
    ,则Controller中的方法无法返回jsp,html页面,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
  2. @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
  3. 使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面若返回json等内容到页面,则需要加@ResponseBody注解
  4. 如果需要返回到指定页面,则需要用 @Controller配合视图解析器 InternalResourceViewResolver才行。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。