ackage com.test;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
/**
* springmvc开发接口实例代码
* @author Administrator
*
*/
@Controller
@RequestMapping("/Test")
public class Test {
/**
* consumes 用于指定处理何种请求的提交内容类型context-type,如果不是指定的类型,则不处理
* method 用于指定请求的方法,可以设置单个或多个,如果请求方法不满足条件则会请求失败。设置post,就只支持post请求,不设置这个属性就两种请求都支持
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(params = "hello", consumes="application/json", method = RequestMethod.POST)
@ResponseBody//这个注解是把返回的map自动封装成json数据的,但是需要在spring.xml里配置,不然会报406错误
public Map<String,Object> testModel(HttpServletRequest request, HttpServletResponse response) throws Exception{
Map<String,Object> responseMap = new HashMap<String, Object>();//用来存接口返回信息
try{
String data= IOUtils.toString(request.getInputStream());//获取传入的json
Map<String, Object> requsetMap = new HashMap<String, Object>();//用来保存接口请求信息
System.out.println("传来的Json是:" + data);
requsetMap = JSON.parseObject(data);//把json转成map
System.out.println("打印requsetMap:"+requsetMap.toString());
/*********业务逻辑开始**********/
//下面只是模拟,所以我简单处理一下
User user = new User();
String username = requsetMap.get("name").toString();
String age = requsetMap.get("age").toString();
user.setAge(age);
user.setName(username);
System.out.println("打印user" + user.toString());
//我把这个user对象直接存入返回的map中去了
responseMap.put("data", user);
//一般做接口开发,都会用到下面两个,一个是code代表你的接口状态,第二是msg,代表接口的情况
responseMap.put("code", "0");//状态码
responseMap.put("msg", "请求成功");//信息描述
/*********业务逻辑结束**********/
}catch(Exception e){
responseMap.put("data", "");
responseMap.put("code", "1");//状态码
responseMap.put("msg", "请求失败,系统异常");//信息描述
e.printStackTrace();
}
System.out.println("接口返回的json:" + JSON.toJSONString(responseMap));
return responseMap;
}
}
@requestBody注解的使用:
- @requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。
- 通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
- 例如说以下情况:
- $.ajax({
- url:"/login",
- type:"POST",
- data:'{"userName":"admin","pwd","admin123"}',
- content-type:"application/json charset=utf-8",
- success:function(data){
- alert("request success ! ");
- }
- });
- @requestMapping("/login")
- public void login(@requestBody String userName,@requestBody String pwd){
- System.out.println(userName+" :"+pwd);
- }
- 这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
- String userName;
- String pwd;
- 那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
- 需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。
- 在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式
- 不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在
- 特殊情况下才会使用,
- 例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式