码迷,mamicode.com
首页 > 编程语言 > 详细

Spring接收和响应json数据

时间:2019-02-19 13:48:02      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:mode   group   core   framework   2.7   浏览器插件   img   public   import   

一、前言

  关于什么是json以及基本使用技巧,为什么使用json等等,这里不再重复,直接进入主题

     :服务端接收json数据还原为java对象,称为反序列化,反之,将java对象作为响应转换为json数据发回给客户端,称为序列化

二、导入json相关框架的依赖(比如jackson)

  如果使用的是spring boot框架,导入spring boot相关依赖后,就存在相关依赖,无需重复,否则会报错;

    如果使用的是spring MVC框架,就需要手动导入相关依赖(比如Jackson),直接上代码,添加到pom文件中

<!-- jackson依赖 -->
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.7.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.7.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.7.0</version>
      </dependency>

 

二、响应json数据

  在spring框架中,controller方法正常写,如果需要响应json,增加@ResponseBody注解,表示当前return为数据不是视图,如果当前controller层都需添加@ResponseBody,则可以在类名前添加@RestController 注解(@ResponseBody@Controller合体)
 

三、在接受json对应的输入参数前,加上@RequestBody注解

  此处需注意,别把@RequestBody@ResponseBody放错地方,观察源代码可知,@RequestBody只能添加在参数前,而@ResponseBody添加在类和方法前

技术图片

 技术图片

 

四、测试代码

import com.jeat.clinic.controller.OVmodel.BookType;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @author 
 * @class JsonTest
 * @Abstract
 * @date 2019/02/19
 */
@RestController
public class JsonTest {
    /**
     * 以实体类接收
     * @param bookType
     * @param request
     * @return
     * {"id":12,"typeName":"类型1"}
     */
    @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
    public BookType acceptJsonByEntity(@RequestBody BookType bookType, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());

        System.out.println(bookType);
        return bookType;
    }

    /**
     * 以map方式接收
     * @param paramsMap
     * @param request
     * @return
     */
    @RequestMapping(value="acceptJsonByMap")
    public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());

        System.out.println(paramsMap);
        return paramsMap;
    }

    /**
     * 以list方式接收(以json数组形式传递)
     * @param bookTypeList
     * @param request
     * @return
     */
    @RequestMapping(value="acceptJsonByList")
    public List<BookType> acceptJsonByList(@RequestBody List<BookType> bookTypeList, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());

        System.out.println(bookTypeList);
        return bookTypeList;
    }

    /**
     * 以单独属性形式接收
     * @param id
     * @param name
     * @return
     */
    @RequestMapping("acceptJsonBySingleParam")
    public MultiValueMap acceptJsonByRequestParam(@RequestBody MultiValueMap params
                                          /* @RequestBody int userId,
                                           @RequestBody String userName*/
    ) {

        System.out.println(params.get("userId")+","+params.get("userName"));
        return params;
    }
}

 

五、测试

  测试我们采用火狐浏览器插件RESTClient,不会的找度娘

1、传输实体(类)

 
技术图片

响应结果:

技术图片

客户端结果:

技术图片

2以map方式接收

 技术图片

响应结果:

技术图片

 

客户端结果:

技术图片

 3、以list方式接收(以json数组形式传递)

 技术图片

响应结果:

技术图片

客户端结果:

技术图片

 

 

 附:RESTClient添加头字段操作:

技术图片

技术图片

技术图片

 

 
 
 
 

Spring接收和响应json数据

标签:mode   group   core   framework   2.7   浏览器插件   img   public   import   

原文地址:https://www.cnblogs.com/jeat/p/10400218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!