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;
}
要是转换为json数据格式就要牵扯到内容协商,先设置yaml,如下
spring:
mvc:
contentnegotiation:
favor-parameter: true
开启基于请求参数的共同协商。http://localhost:8080/test/person?format=json\xml 将format后面的值改为xml或json返回值就是xml或json
2. @ResponseBody
@ResponseBody 注解的作用是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据或者是XML也就是如果若返回json、xml等内容到页面,则需要加@ResponseBody注解
@ResponseBod可以已加到类上,下面方法中就不用单独加@ResponseBody了
@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注解
- @RestController注解相当于@ResponseBody + @Controller合在一起的作用。
使用@RestController注解Controller,则Controller中的方法无法返回jsp,html页面,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。 - @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
- 使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面若返回json等内容到页面,则需要加@ResponseBody注解
- 如果需要返回到指定页面,则需要用 @Controller配合视图解析器 InternalResourceViewResolver才行。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。