最近做了一个需求,页面上展示的字段要求尽可能的简介,但是实际插入到数据库的时候,会有很多ID,还有诸如创建人,创建时间,更新人,更新时间等字段。
而这些字段,前端要求不展示。
最后的页面效果如下:
于是我就用了@JsonIgnore
注解进行开发。
后端的entity实体类是这样的:
package com.ruoyi.digital.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
/**
* 设备清单对象 BU_Machine_BasicInfo
*/
@Data
public class BuMachineBasicinfo implements Serializable{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long macId;
/** 设备编码 */
private String macCode;
private String macName;
/** 设备类型ID */
@JsonIgnore
private Long mactId;
/** 设备类型名称 */
private String macTName;
/** 所属公司名称 */
private String companyName;
/** 系统ID */
@JsonIgnore
private Long mosId;
/** 系统名称 */
private String mosName;
/** 设备描述 */
private String macDesc;
/** 公司ID */
@JsonIgnore
private Long companyId;
/** 设备描述 */
private String wsName;
/** 车间名 */
private String cName;
/** 车间Id */
@JsonIgnore
private Long CID;
/** 是否为大机器 */
@JsonIgnore
private Long isBig;
/** 添加人ID */
@JsonIgnore
private Long addUserId;
/** IP地址 */
private String macIP;
/** 端口号 */
private Long macPort;
/** 创建时间 */
@JsonIgnore
private Long addTimestamp;
/** 更新人ID */
@JsonIgnore
private Long lastUpdateUserId;
/** 更新时间 */
@JsonIgnore
private Long lastUpdateTimestamp;
/** 删除标记 */
@JsonIgnore
private Integer isDel;
/** 删除人ID */
@JsonIgnore
private Long delUserid;
/** 删除人时间 */
@JsonIgnore
private Long delTimestamp;
}
@JsonIgnore
注解在返回参数时会忽略该字段,而不是直接返回null。
可以看到,返回的样式很简洁,基本上达到了要求。
但是,在添加页面的时候,突然报了一个错误:java.sql.SQLException
报错信息比较奇怪,说 MacT_ID没有默认值
。
可我明明传了MacT_ID
,怎么会取不到呢。
我用debug模式测了一下,这个值竟然是null。
我想了想,有可能是@JsonIgnore注解
导致的,百度了一下,果然是。
这个问题的解决方案还是很多的。
- set方法加上
@JsonIgnore
,表示返回时忽略,get方法加上@JsonProperty
,表示请求时注入 - 在字段上添加
@JsonProperty(access= JsonProperty.Access.WRITE_ONLY)
,表示只在写入时设置该值(读的时候不返回。)
@JsonProperty
注解的access有四个,是AUTO
,READ_ONLY
,WRITE_ONLY
,READ_WRITE
。
READ_ONLY
和@JsonIgnore
类似。AUTO
是默认策略,读写均设置值,相当于READ_WRITE
。
由于我用了lombok插件,在实体类没有写get和set方法,因此我用的是第二种方法。