Json字符串对象转换

一.导入依赖

		<!-- 导入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>

效果图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值