3 rest
来源:互联网 发布:网络语qaq 编辑:程序博客网 时间:2024/05/05 13:15
原创地址:http://wiselyman.iteye.com/blog/2214290
3.1 REST
- REST:Representational State Transfer;
- REST是一种数据导向web service,相对于SOAP是一种操作操作和处理导向的web service;
- Spring为对REST的支持提供了@RestController;
- 在没有@RestController可以通过@Controller,@ResponseBody组合实现REST控制器;
- 但是我们经常会使用@ResponseBody这样很麻烦,且易忘记;
- 使用@RestController替代@Controller,我们就不用使用@ResponseBody;
- REST支持的http method(通过@RequestMapping的method属性控制)
- POST:新增
- GET:读取
- PUT/PATCH:更新
- DELETE:删除
produces
的内容是指定返回的媒体类型让浏览器识别- 如返回text/plain的话,浏览器上的js回掉拿到的是字符串,需要自己转换对象;
- 如返回application/json的话,浏览器上的js拿到的就是js对象而不是字符串,就不需要进行转换;
本例演示向控制器提交json数据,返回结果分别为json和xml格式;
3.2 示例
3.2.1 @RestController源码
从@RestController看出,@RestController是一个元注解,组合了@Controller,@ResponseBody,相当于同时使用了@Controller @ResponseBody
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@ResponseBodypublic @interface RestController { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @return the suggested component name, if any * @since 4.0.1 */ String value() default "";}
3.2.2 代码
- 添加jackson依赖
jackson-dataformat-xml依赖jackson-bind
,这样我们能同时返回xml和json
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.5.3</version></dependency>
若只需返回json数据(大多数项目都是这样),将上面依赖更换为
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version></dependency>
- 传值对象
package com.wisely.web;public class DemoObj { private Long id; private String name; //此处一定要有空构造,不然会有400 bad request,主要是jackson将json参数转换为对象需要 public DemoObj() { super(); } public DemoObj(Long id, String name) { super(); this.id = id; this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
DemoMVCConfig
注册静态资源
// 静态资源映射 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/js/**").addResourceLocations("/js/"); }
- 控制器
package com.wisely.web;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")public class RESTController { @RequestMapping(value = "/getjson",produces={"application/json;charset=UTF-8"}) public DemoObj getjson(@RequestBody DemoObj obj){ return new DemoObj(obj.getId()+1, obj.getName()+"yy"); } @RequestMapping(value = "/getxml",produces={"application/xml;charset=UTF-8"}) public DemoObj getxml(@RequestBody DemoObj obj){ return new DemoObj(obj.getId()+1, obj.getName()+"yy"); }}
- 页面代码
<script type="text/javascript" src="<c:url value="/js/jquery.js" />"></script><script type="text/javascript">var json = {"id":456,"name":"phy"};$.ajax({ url: "api/getjson", data: JSON.stringify(json), type:"POST", contentType:"application/json", success: function(data){ console.log(data); } });$.ajax({ url: "api/getxml", data: JSON.stringify(json), type:"POST", contentType:"application/json", success: function(data){ console.log(data); } });</script>
- 结果
0 0
- 3 rest
- SpringMvc(3)--REST
- rest
- rest
- REST
- REST
- REST
- rest
- REST
- REST
- rest
- rest
- REST
- REST
- REST
- REST
- REST
- REST
- js判断用户的浏览设备是移动设备还是PC
- 【编程珠玑】自己实现位向量类
- Hbase使用filter快速高效查询
- 继承和派生
- property_get/property_set
- 3 rest
- jeeSite索引结构介绍
- 筛-BZOJ-1607-[Usaco2008 Dec]Patting Heads 轻拍牛头
- IOS之NSCache解析
- Ajax定时从服务器取数据
- 导航栏的事
- SpringMVC中四个基本注解
- mac os x 查看网络端口情况
- C++上机报告-2