一.导入依赖
<!-- 导入json包解析前端传来的json字符串 -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
二.Controller 层
这里是我自己一个小项目的案例,主要是想说明@RequestMapping的produces 属性,因为前端传过来的是一个纯json字符串所以这里用json接收
/**
* 导入 excel
* @param
* @return
*/
@RequestMapping(value = "/batchAddStu",produces = "application/json;charset=UTF-8")
@ResponseBody
public Result importExcel(String data) throws Exception {
/**====解析json字符,这里是一个数组所以我用list去接==**/
JSONArray jsonArray=JSONArray.fromObject(data);
List<Student> students = new ArrayList<>();
//获得jsonArray的第一个元素
for (int i = 0; i < jsonArray.size(); i++) {
Object o= jsonArray.get(i);
JSONObject jsonObject2= JSONObject.fromObject(o);
Student stu2=(Student) JSONObject.toBean(jsonObject2, Student.class);
students.add(stu2);
}
/**
1、如果要是传来单个的对象就使用JSONObject
JSONObject jsonObject=JSONObject.fromObject(objectStr);
Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);
*/
}
三. @JsonProperty注解
@JsonProperty注解是为了和前端字段对应上因为我们这个小案例是前后端分离,由于没有提前定好命名规范,前端的命名都是以下划线,而后台java都是用的驼峰命名,使用这个注解就可以让驼峰和前端的下划线对应上
@Data
@ExcelTarget("student")
public class Student implements Serializable {
//学生id(学号)
@Excel(name = "学号")
@JsonProperty("stu_id")
private Integer stuId;
//学生姓名
@Excel(name = "姓名")
@JsonProperty("stu_name")
private String stuName;
//登录密码
// @Excel(name = "密码")
@ExcelIgnore
private String stuPswd;
//学生年龄
@Excel(name = "年龄")
private Integer stuAge;
//学生性别:男,女
@Excel(name = "性别")
@JsonProperty("stu_sex")
private String stuSex;
//学生头像
// @Excel(name = "头像")
@ExcelIgnore
private String stuHdimg;
//学生电话
@Excel(name = "手机号")
@JsonProperty("stu_phone")
private String stuPhone;
//学生迭代等级
//@Excel(name = "迭代等级")
@ExcelIgnore
private Integer stuIteration;
//属于那个班级
//@Excel(name = "班级")
@Excel(name = "班级")
// @JsonProperty("")
private String stuClsName;
//班级的id
@ExcelIgnore
@JsonProperty("stu_clsId")
private Integer stuClsid;
@ExcelIgnore
private Integer stuVidPath;
}
Student(stuId=1935090102, stuName=张三, stuPswd=null, stuAge=null, stuSex=女, stuHdimg=null, stuPhone=555, stuIteration=null, stuClsName=19级信息管理三班, stuClsid=19103, stuVidPath=null)
这是我们后台的数据,都是驼峰命名 标上这个注解就可以转换为下划线
四、后端给前台返回值的问题
前端渲染的时候都是以下划线命名,而我们java后台实体类是用驼峰命名的,所以在返回数据的时候遇到了数据渲染不上的问题
4.1 如何解决
可以在返回的时候不返回实体类,返回一个map集合,然后property属性可以设置为前台的下划线格式,这样就可以和前端对应上了
<resultMap id="getAllProblem" type="HashMap">
<id column="pbm_id" jdbcType="INTEGER" property="pbm_id" />
<result column="pbm_videoId" jdbcType="INTEGER" property="pbmVideoid" />
<result column="pbm_clsId" jdbcType="INTEGER" property="pbmClsid" />
<result column="pbm_stuId" jdbcType="INTEGER" property="pbmStuid" />
<result column="pbm_text" jdbcType="VARCHAR" property="pbm_text" />
<result column="pbm_time" jdbcType="INTEGER" property="pbm_time" />
<result column="pbm_count" jdbcType="INTEGER" property="pbm_count" />
<result column="pbm_imgs" jdbcType="VARCHAR" property="pbm_imgs" />
<result column="stu_id" jdbcType="INTEGER" property="stu_id" />
<result column="stu_name" jdbcType="VARCHAR" property="stu_name" />
<result column="stu_hdimg" jdbcType="VARCHAR" property="stu_hdimg" />
</resultMap>
<select id="getVideoProblem" resultMap="getAllProblem">
select
s.stu_id,
p.pbm_count,
P.pbm_text,
p.pbm_time,
p.pbm_imgs,
s.stu_hdimg,
s.stu_name,
p.pbm_id
from web_problem p, web_student s
where
s.stu_id = p.pbm_stuId and
pbm_videoId = #{pbmVideoid,jdbcType=INTEGER}
limit #{page},3
</select>