最近在处理枚举类型的值的时候遇到了很多问题,现在将他们记录下来,一来以后可以增强自己的记忆,二来让自己坚持一个记笔记的好习惯。也可以供大家参考,提出问题,一起探讨。
问题一:如何在实体类中定义枚举类型的字段(直接上代码)
/**
* 定义政府文件的来文单位的枚举类
* @author Administrator
*
*/
public enum FromUnit {
StateCouncil("国务院文件"),Scgovernment("国务院办公厅文件") ; //来文单位分别是国务院文件(默认),国务院办公厅文件
private String variName;
private FromUnit(String variname){
this.variName=variname;
}
@Override
public String toString(){
return this.variName;
}
}
在实体类StateCouncilFile中定义来文单位字段
package com.gzydt.oa.governEntity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.gzydt.oa.enumEntity.FileType;
import com.gzydt.oa.enumEntity.FromUnit;
import com.gzydt.oa.enumEntity.Serency;
/**
* 国务院文件,继承基类(政府文件)
*
* @author duanhongyan
* @since 2015-4-2
*
*
*/
@Entity
@DiscriminatorValue("StateCouncilFile")
public class StateCouncilFile extends GovernmentFile{
private static final long serialVersionUID = -542044540670855189L;
private String refNumber;// 文号
@Enumerated(EnumType.STRING)
@Column(length=50, nullable=true)
private FromUnit fromUnit=FromUnit.StateCouncil;// 发文单位
// 设置数据库中共的默认值,默认是国令
@Enumerated(EnumType.STRING)
@Column(length=50, nullable=true)
private FileType fileTypeGuo = FileType.CoutryUrge;// 文件类型
@Column(name = "sendFileDate")
@Temporal(TemporalType.TIMESTAMP)
private Date sendFileDate;// 发文日期
@Column(name = "getFileDate")
@Temporal(TemporalType.TIMESTAMP)
private Date getFileDate;// 收文日期
// 设置数据库中共的默认值,默认是 普通
@Enumerated(EnumType.STRING)
@Column(length=50, nullable=true)
private Serency serency = Serency.Common;// 密级
private String theme;// 主题词
private long appendTextId;//附件文本的id
private String appendTextName;//附件文本名称
public String getRefNumber() {
return refNumber;
}
public void setRefNumber(String refNumber) {
this.refNumber = refNumber;
}
public FromUnit getFromUnit() {
return fromUnit;
}
public void setFromUnit(FromUnit fromUnit) {
this.fromUnit = fromUnit;
}
public FileType getFileTypeGuo() {
return fileTypeGuo;
}
public void setFileTypeGuo(FileType fileTypeGuo) {
this.fileTypeGuo = fileTypeGuo;
}
public Date getSendFileDate() {
return sendFileDate;
}
public void setSendFileDate(Date sendFileDate) {
this.sendFileDate = sendFileDate;
}
public Date getGetFileDate() {
return getFileDate;
}
public void setGetFileDate(Date getFileDate) {
this.getFileDate = getFileDate;
}
public Serency getSerency() {
return serency;
}
public void setSerency(Serency serency) {
this.serency = serency;
}
public String getTheme() {
return theme;
}
public void setTheme(String theme) {
this.theme = theme;
}
public long getAppendTextId() {
return appendTextId;
}
public void setAppendTextId(long appendTextId) {
this.appendTextId = appendTextId;
}
public String getAppendTextName() {
return appendTextName;
}
public void setAppendTextName(String appendTextName) {
this.appendTextName = appendTextName;
}
}
对StateCouncilFile这个实体赋值(枚举类)的值的赋值方式
//设置国务院的子类值
private void setState(JSONObject preceInfo, List appeFiles,StateCouncilFile entity) throws ParseException {
entity.setRefNumber(preceInfo.optString("refNumber"));
FromUnit fromUnit = null;
FileType fileTypeGuo=null;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date sendFileDate=null;
Date getFileDate=null;
Serency serency=null;
if(preceInfo.optString("fromUnit") != null && !"".equals(preceInfo.optString("fromUnit"))){
fromUnit=FromUnit.valueOf(preceInfo.optString("fromUnit"));
}
if(preceInfo.optString("fileTypeGuo") != null && !"".equals(preceInfo.optString("fileTypeGuo"))){
fileTypeGuo=FileType.valueOf(preceInfo.optString("fileTypeGuo"));
}
然后将实体类对象通过持久化到数据库中,查询满足条件的实体对象的时候返回数据时候如果是直接用json对象来返回该实体StateCouncilFile 时候,里面的枚举类型的字段会为空,此时我们需要转换json数据和对象(枚举类)之间进行转换。以下有两种方式
json与对象(枚举类对象)的转换方式1:
在pom文件中加入依赖:
com.google.code.gson
gson
2.3.1
//通过Gson方式来实现枚举类型与json数据的互相转换
Gson gson=new Gson();
String json=gson.toJson(messages);
json与对象的转换方式2:该种方式可以实现直接将一个json数据转为一个实体对象,省去了对实体中的每个字段不断的set值的方式
在pom文件中加入依赖:
com.google.code.gson
gson
2.3.1
将json数据转化为实体对象方式:下面的News是一个对象,preceInfo是前端传来的New对象的字段值,直接调用mapper中的readValue()方法将json数据转为一个实体对象//使用jackson实现对象与实体之间的转换
ObjectMapper mapper=new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);
news= mapper.readValue(preceInfo.toString(), News.class);
news = newsService.publish(news);
将对象(枚举类)转为一个json数据:
此处将java对象(枚举类)转为json的处理
/*ObjectMapper mapper=new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);
String json=mapper.writeValueAsString(messages);
String contentRange = String.format("items %d-%d/%d", from, to, count);
另外再赋一种方式:将json对象转为实体的方式
在pom文件中加入依赖:
net.sf.json-lib
json-lib
2.4
jdk15