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