您的位置:首页 > 编程语言 > Java开发

SpringMVC构建Restful。

2016-05-23 18:32 453 查看
因为spring是依赖jackson来生成json,需要添加jar包。

pom.xml文件添加依赖。

<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>


web.xml文件

package sy.model;

import java.util.Date;

public class Myuser {
private Integer id;

private String name;

private String sex;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name == null ? null : name.trim();
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}

@Override
public String toString() {
return "Myuser [id=" + id + ", name=" + name + ", sex=" + sex
+ ", province=" + province + ", createdate=" + createdate
+ ", updatedate=" + updatedate + "]";
}

}


View Code
Controller类

package sy.controller;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;

import sy.model.Myuser;

@Controller
public class RestfulController {

@RequestMapping(value="/hello",produces = "text/plain;charset=UTF-8")
public @ResponseBody
String hello1(){
return "index";
}

@RequestMapping(value="/hello")
String hello2(){
return "index";
}

@RequestMapping(value = "/say/{msg}", produces = "application/json;charset=UTF-8")
public @ResponseBody
String say(@PathVariable(value = "msg") String msg) {
return "{\"msg\":\"you say:'" + msg + "'\"}";
}

@RequestMapping(value = "/user/{id:\\d+}", method = RequestMethod.GET)
public @ResponseBody
Myuser getuser(@PathVariable("id") int id) throws UnsupportedEncodingException {
Myuser myuser = new Myuser();

myuser.setName("张三");
myuser.setSex("男");
myuser.setId(id);
return myuser;
}

@RequestMapping(value = "/user/{id:\\d+}", method = RequestMethod.DELETE)
public @ResponseBody
Object deleteuser(@PathVariable("id") int id) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "删除人员信息成功");
return jsonObject;
}

@RequestMapping(value = "/user", method = RequestMethod.POST)
public @ResponseBody
Object adduser(Myuser user) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "注册人员信息成功");
return jsonObject;
}

@RequestMapping(value = "/user", method = RequestMethod.PUT)
public @ResponseBody
Object updateuser(Myuser user) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "更新人员信息成功");
return jsonObject;
}

@RequestMapping(value = "/user", method = RequestMethod.PATCH)
public @ResponseBody
List<Myuser> listuser(@RequestParam(value = "name", required = false, defaultValue = "") String name) {

List<Myuser> lstusers = new ArrayList<Myuser>();

Myuser myuser = new Myuser();
myuser.setName("张三");
myuser.setSex("男");
myuser.setId(101);
lstusers.add(myuser);

Myuser myuser2 = new Myuser();
myuser2.setName("李四");
myuser2.setSex("女");
myuser2.setId(102);
lstusers.add(myuser2);

Myuser myuser3 = new Myuser();
myuser3.setName("王五");
myuser3.setSex("男");
myuser3.setId(103);
lstusers.add(myuser3);

return lstusers;
}

}


restful的实现主要是依赖@ResponseBody、@RequestBody注解和HttpMessageConverter来实现pojo对象和对应协议的转换。

Spring 3.X系列增加了新注解@ResponseBody,@RequestBody

@RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。

@ResponseBody 将内容或对象作为 HTTP 响应正文返回,并通过Adapter调用合适的HttpMessageConverter来转换对象,写入HttpResponse输出流,返回给浏览器。

HttpMessageConverter接口,需要开启<mvc:annotation-driven />。
AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter>

引用
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
有关@ResponseBody,@RequestBody,@PathVariable 的详细信息,参考《@ResponseBody,@RequestBody,@PathVariable 》
比如上述controller中的hello1和hello2方法,其中hello1使用了注解@ResponseBody,那么会将string通过httpMsessageConverter直接转换,写入response;而hello2方法没有使用注解,那么就会根据spring-mvc.xml中配置的解析器,寻找jsp页面,并写入response,返回给浏览器。

总结:
  1.和springmvc配置不一样的地方主要是controller中的方法也是用@ResponseBody注解,将Object转成相对应的协议(一般是xml和json)写入到response中,返回给浏览器。
  2.一定要开启<mvc:annotation-driven />
  3.方法RequestMapping设置一定要遵循Restful规范风格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: