0.前言
上一篇文章中,我们已经搭建完了SpringMVC并创建了基础页面。整个流程已经没有太大问题了。这一篇中我们要把尝试去遍历一个数据,并尝试只返回json格式,考虑后期的前后端分离。
1.数据遍历
我们先来构造一个List, 根据上一篇我们构造的实体类,这里添加几个数组。然后把它交给ModelAndView。整个Controller的代码如下:
package com.cat.controller; import com.cat.domain.Person; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; import java.util.List; @Controller @RequestMapping public class IndexController { @RequestMapping("/hello") public ModelAndView hello(){ List<Person> PersonList =new ArrayList<>(); Person Person1 = new Person(); Person Person2 = new Person(); Person Person3 = new Person(); Person1.name ="张三"; Person2.name ="李四"; Person3.name ="王五"; Person1.age =12; Person2.age =13; Person3.age =15; Person1.sex ="男"; Person2.sex ="女"; Person3.sex ="男"; PersonList.add(Person1); PersonList.add(Person2); PersonList.add(Person3); System.out.println(PersonList); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("hello"); modelAndView.addObject("person",PersonList); return modelAndView; } }
2.页面渲染
在jsp原生的列表渲染时遇到了坑,页面渲染不出来。解决办法可以点这。
jsp层的代码如下:(注意在web.xml中引入坐标,不然会报错,具体步骤可以点上面的 ”解决办法“)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <table> <tr> <td>姓名</td> <td>性别</td> <td>年龄</td> </tr> <tr> <c:forEach items="${person}" var="p"> <tr> <td>${p.name}</td> <td>${p.sex}</td> <td>${p.age}</td> </tr> </c:forEach> </tr> </table> </body> </html>
遍历完毕之后,效果图如下:
3. 返回json
为什么要返回json呢?
现在这个时代大部分都是前后端分离了,你只需要开发出后端的端口,前端调用即可。当然,你是全栈更好,前后端都可以自己开发, 但是这并不意味着你要用jsp。毕竟。。。。。
一个比较尴尬问题是jsp现在用的人真的变少了,现在都用VUE、Angular 、React等前端框架了。
2.如何返回json数据?
我们需要一个json工具,有几个工具是比较常用的。
- Json-lib
- Jackson
- FastJson
- Gson
在这里我们选择的是Jackson。
首先我们在pom.xml中添加依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency>
然后在Controller中把数据改写成这样就行
ObjectMapper mapper = new ObjectMapper(); String str = mapper.writeValueAsString(PersonList);
全部代码如下:
package com.cat.controller; import com.cat.domain.Person; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import java.io.IOException; import java.util.ArrayList; import java.util.List; @Controller @RequestMapping(produces="text/html;charset=UTF-8") public class IndexController { List<Person> PersonList =new ArrayList<>(); // @RequestMapping("/hello") // public ModelAndView hello(){ // // Person Person1 = new Person(); // Person Person2 = new Person(); // Person Person3 = new Person(); // Person1.name ="张三"; // Person2.name ="李四"; // Person3.name ="王五"; // Person1.age =12; // Person2.age =13; // Person3.age =15; // Person1.sex ="男"; // Person2.sex ="女"; // Person3.sex ="男"; // PersonList.add(Person1); // PersonList.add(Person2); // PersonList.add(Person3); // System.out.println(PersonList); // ModelAndView modelAndView = new ModelAndView(); // modelAndView.setViewName("hello"); // modelAndView.addObject("person",PersonList); // return modelAndView; // } //返回json格式 @RequestMapping(value = "/hello2" ) @ResponseBody public Object hello2() throws IOException { Person Person4 = new Person(); Person Person5 = new Person(); Person Person6 = new Person(); Person4.name ="王晓红"; Person5.name ="王晓绿"; Person6.name ="王晓蓝"; Person4.age =13; Person5.age =14; Person6.age =16; Person4.sex ="男"; Person5.sex ="女"; Person6.sex ="男"; PersonList.add(Person4); PersonList.add(Person5); PersonList.add(Person6); System.out.println(PersonList); ObjectMapper mapper = new ObjectMapper(); String str = mapper.writeValueAsString(PersonList); System.out.println(str); return str; } }
如果你出现了下面的情况,也就是json返回的时候出现了乱码。我们要在@RequestMapping()里面加入 produces=”text/html;charset=UTF-8″
当我们加入上面的配置的时候再次访问地址就可以拿到json数据了。
返回目录:JAVA