老师你好,商品添加 productStr转成实体product,mapper.readValue(productStr, Product.class)问题

来源:8-6 商品添加之前端实现下

慕后端9028910

2019-06-04

根据调试信息,可以看到,未知的productCategory,第二个图是前端传的表单信息
图片描述
图片描述

然后我就去找 product实体类中的属性,
图片描述

可以看到是一致的, 但我调试了几次,仍然是相同的问题,麻烦问一下老师,问题出在哪? 感谢!

写回答

2回答

慕后端9028910

提问者

2019-06-05

老师, 我好像找到了问题的所在,但是我有点想不通。 下面图 很诡异,我特意写了个demo,专门测试这个json转product实体类,

//img.mukewang.com/szimg/5cf739c7000179b512220432.jpg

//img.mukewang.com/szimg/5cf739c70001912312460629.jpg

然后我去product实体类中 查看属性,如下图

//img.mukewang.com/szimg/5cf73a360001f62905380494.jpg

导致测试失败,字符串中 如果将productCategory 改成category,就成功了,另外,我发现即使我怎么改实体类中的属性,比如 productName ==> productNames, 在测试时,通过从失败结果中 查看 13 个属性,仍然是productName , 很诡异呀, 我改了实体类的属性,测试返回的结果,仍然没有变,这也就导致了,我怎么改变实体类中productCategory   一直会报错的原因!   我现在不明白的是 为什么怎么改变属性,序列化 反序列化之后,属性仍然不会变?

0
1
翔仔
非常诡异的问题,我也第一次碰到,但是实在大赞同学的调试定位问题的能力,还懂得通过hardcode的方式去调试,难能可贵,已经很优秀了。同学看看你的Getter,只要Getter名字没改,那么一般都不会改变的呢,建议getter setter和私有变量的名字要保持一致。然后同学可以通过console输出的项目路径,去到真实发布该项目的地方,一般是(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)类似这种路劲,去到里面,找到你的Product.class文件,然后用eclipse打开(因为eclipse默认会自动逆解码class文件,如果不行,建议用反编译工具打开class文件查看源码),看看class文件里面的成员变量是否名字有变更,得试试,加油
2019-06-06
共1条回复

翔仔

2019-06-05

同学好,这个问题比较奇怪,没咋遇到过,感觉jackson没认这个field,同学可以clean下tomcat试试,然后也可以复制粘贴我的实体类,clean tomcat试试

package com.imooc.o2o.entity;

import java.util.Date;
import java.util.List;

/**
 * 商品实体类
 * 
 * @author xiangze
 *
 */
public class Product {
	// 主键ID
	private Long productId;
	// 商品名
	private String productName;
	// 商品简介
	private String productDesc;
	// 简略图
	private String imgAddr;
	// 原价
	private String normalPrice;
	// 现价(推广价格)
	private String promotionPrice;
	// 权重,越大越排前显示
	private Integer priority;
	// 商品积分
	private Integer point;
	// 创建时间
	private Date createTime;
	// 最近一次的更新时间
	private Date lastEditTime;
	// 0.下架 1.在前端展示系统展示
	private Integer enableStatus;

	// 图片详情图列表,跟商品是多对一的关系
	private List<ProductImg> productImgList;
	// 商品类别,一件商品仅属于一个商品类别
	private ProductCategory productCategory;
	// 店铺实体类,标明商品属于哪个店铺
	private Shop shop;

	public Long getProductId() {
		return productId;
	}

	public void setProductId(Long productId) {
		this.productId = productId;
	}

	public String getProductName() {
		return productName;
	}

	public void setProductName(String productName) {
		this.productName = productName;
	}

	public String getProductDesc() {
		return productDesc;
	}

	public void setProductDesc(String productDesc) {
		this.productDesc = productDesc;
	}

	public String getImgAddr() {
		return imgAddr;
	}

	public void setImgAddr(String imgAddr) {
		this.imgAddr = imgAddr;
	}

	public String getNormalPrice() {
		return normalPrice;
	}

	public void setNormalPrice(String normalPrice) {
		this.normalPrice = normalPrice;
	}

	public String getPromotionPrice() {
		return promotionPrice;
	}

	public void setPromotionPrice(String promotionPrice) {
		this.promotionPrice = promotionPrice;
	}

	public Integer getPriority() {
		return priority;
	}

	public void setPriority(Integer priority) {
		this.priority = priority;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public Date getLastEditTime() {
		return lastEditTime;
	}

	public void setLastEditTime(Date lastEditTime) {
		this.lastEditTime = lastEditTime;
	}

	public Integer getEnableStatus() {
		return enableStatus;
	}

	public void setEnableStatus(Integer enableStatus) {
		this.enableStatus = enableStatus;
	}

	public Integer getPoint() {
		return point;
	}

	public void setPoint(Integer point) {
		this.point = point;
	}

	public List<ProductImg> getProductImgList() {
		return productImgList;
	}

	public void setProductImgList(List<ProductImg> productImgList) {
		this.productImgList = productImgList;
	}

	public ProductCategory getProductCategory() {
		return productCategory;
	}

	public void setProductCategory(ProductCategory productCategory) {
		this.productCategory = productCategory;
	}

	public Shop getShop() {
		return shop;
	}

	public void setShop(Shop shop) {
		this.shop = shop;
	}
}

必要的时候,可以先使用链接里的ignore方法试试

https://blog.csdn.net/isea533/article/details/33397735?utm_source=tuicool&utm_medium=referral

然后再调试看看,product里面有没有转有productCategory

赞同学的调试能力

0
2
慕后端9028910
老师, 由于这个回答没有办法添加图片,因此我在上面写了回答,辛苦老师看一下,感谢!
2019-06-05
共2条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5101 学习 · 8139 问题

查看课程