SpringMvc(json处理)

  • 1、SpringMvc返回Json数据
  • 1.1、@ResponseBody
  • 1.2、Jackson
  • 1.2.1、pom依赖引入
  • 1.2.2、实体类
  • 1.2.3、控制器
  • 1.3、@JsonIgnore
  • 1.4、@JsonFormat
  • 1.5、consumes
  • 2、SpringMvc获取Json数据
  • 2.1、单个参数的传递
  • 2.2、实体参数的传递
  • 2.3、传入模型用Map接收


1、SpringMvc返回Json数据

1.1、@ResponseBody

方法上加上这个注解之后,return返回的东西就会成为一个字符串,而不是一个jsp页面。

@Controller
public class JsonController {
    @RequestMapping("/json")
    @ResponseBody
    public String json(){
        System.out.println("json");
        return "json";
    }
}

springmvc json自动映射对象和对象中的数组 springmvc json解析_jsp

如果我们返回一个其它的非String对象则会报错,就比如返回一个json,就会报错,那我们现在需要它返回一个json对象,那么我们就需要使用jackson(用来解析 JSON 的框架)。详情看1.2。

1.2、Jackson

1、首先我们需导入几个jar包,jackson-core和jackson-databind、jackson-annotations。
2、将导入进来的jar包put到lib文件夹中。
3、在对应的处理方法上加上@ResponseBody注解或者在类上面加上@RestController注解。
spring的配置文件一定要有annotation-driven配置:

<mvc:annotation-driven></mvc:annotation-driven>

代码示例如下:

1.2.1、pom依赖引入

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.5.Final</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.3</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.3</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.10.3</version>
</dependency>

1.2.2、实体类

private Integer id;
private String name;

1.2.3、控制器

@Controller
@RestController     // 该类中所有的处理方法都会以json字符串的形式进行返回
public class JsonController {
    @RequestMapping("/json")
    @ResponseBody
    public List json(){
        List<User> list = new ArrayList();
        list.add(new User(1,"小乐乐"));
        list.add(new User(2,"大乐乐"));
        return list;
    }
}

1.3、@JsonIgnore

注解是加在实体类上面的,SpringMvc可以在返回Json数据时,忽略此属性,也就是不向前段返回此字段的信息。
代码、结果截图示例如下:

private Integer id;
private String name;
@JsonIgnore
private String password;
private String address;
@Controller
@RestController     // 该类中所有的处理方法都会以json字符串的形式进行返回
public class JsonController {
    @RequestMapping("/json")
    public User json(){
        User user = new User(1,"小乐乐","123456","陕西省西安市");
        return user;
    }
}

springmvc json自动映射对象和对象中的数组 springmvc json解析_springmvc_02

1.4、@JsonFormat

用于实体类上,格式化数据
示例:

@JsonFormat(pattern = "yyyy-mm-dd")
private Date birthday;

1.5、consumes

可设置请求数据格式
示例:

@PostMapping(value = "requestJson02",consumes = "application/json")
public User requestJson02(@RequestBody User user){
    System.out.println(user);
    return user;
}

2、SpringMvc获取Json数据

2.1、单个参数的传递

@PostMapping("/json/request01")
public User requestJson(@RequestBody String name){
    User user = new User(1,"小乐乐","123456","陕西省西安市");
    System.out.println(name);
    return user;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <%-- 引入静态资源文件 --%>
    <script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
    <%-- jquery脚本 --%>
    <script type="text/javascript">
        /*页面加载函数*/
        $(function () {
          $.ajax({
            url:"${pageContext.request.contextPath}/json/request01",
            method:"post",
            data:"小乐乐",
            // 默认会以form的内容提交,application/x-www-form-urlencoded
            // 如果是form的提交方式,传参就是"name=小乐乐&id=1"
            // 如果是 application/json ,则可以以json的方式传递参数
            contentType:"application/json",
            dataType:"json",
            success:function (result) {
                alert(result.address);
            }
          })
        })
    </script>
  </head>
  <body>
  $END$
  </body>
</html>

2.2、实体参数的传递

@PostMapping("requestJson02")
public User requestJson02(@RequestBody User user){
    System.out.println(user);
    return user;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <%-- 引入静态资源文件 --%>
    <script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
    <%-- jquery脚本 --%>
    <script type="text/javascript">
        /*页面加载函数*/
        $(function () {
          $("#btnTwo").click(function () {
            var user = {
              "id":"1999",
              "name":"HaHa"
            };

            $.ajax({
              url:"${pageContext.request.contextPath}/requestJson02",
              method:"post",
              data:JSON.stringify(user),
              // 默认会以form的内容提交,application/x-www-form-urlencoded
              // 如果是form的提交方式,传参就是"name=小乐乐&id=1"
              // 如果是 application/json ,则可以以json的方式传递参数
              contentType:"application/json",
              dataType:"json",
              success:function (result) {
                alert("sss");
              }
            })
          })
        })


    </script>
  </head>
  <body>
  <input type="button" value="传入单个数据点击事件" id="btnOne">
  <input type="button" value="传入模型点击事件" id="btnTwo">
  </body>
</html>

2.3、传入模型用Map接收

@PostMapping("requestJson03")
public Map requestJson03(@RequestBody Map<String,String> map){
    System.out.println(map);
    return map;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <%-- 引入静态资源文件 --%>
    <script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
    <%-- jquery脚本 --%>
    <script type="text/javascript">
        /*页面加载函数*/
        $(function () {
          $("#btnThree").click(function () {
            var user = {
              "id":"1999",
              "name":"HaHa"
            };

            $.ajax({
              url:"${pageContext.request.contextPath}/requestJson03",
              method:"post",
              data:JSON.stringify(user),
              // 默认会以form的内容提交,application/x-www-form-urlencoded
              // 如果是form的提交方式,传参就是"name=小乐乐&id=1"
              // 如果是 application/json ,则可以以json的方式传递参数
              contentType:"application/json",
              dataType:"json",
              success:function (result) {
                alert("sss");
              }
            })
          })
        })


    </script>
  </head>
  <body>
  <input type="button" value="传入单个数据点击事件" id="btnOne">
  <input type="button" value="传入模型点击事件" id="btnTwo">
  <input type="button" value="传入模型用Map接收点击事件" id="btnThree">
  </body>
</html>