json参数的接口基本开发(@ResponseBody和@requestBody的使用)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23145857/article/details/84107394

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类的话也可以使用这种接受方式

猜你喜欢

转载自blog.csdn.net/qq_23145857/article/details/84107394
今日推荐