JSON与对象(枚举类对象)之间的相互转换

最近在处理枚举类型的值的时候遇到了很多问题,现在将他们记录下来,一来以后可以增强自己的记忆,二来让自己坚持一个记笔记的好习惯。也可以供大家参考,提出问题,一起探讨。

问题一:如何在实体类中定义枚举类型的字段(直接上代码)

<span style="font-size:18px;">/**
 * 定义政府文件的来文单位的枚举类
 * @author Administrator
 *
 */
public enum FromUnit {
    StateCouncil("国务院文件"),Scgovernment("国务院办公厅文件") ;   //来文单位分别是国务院文件(默认),国务院办公厅文件
    private String variName;
    private FromUnit(String variname){
        this.variName=variname;
    }
    @Override
    public String toString(){
        return this.variName;
    }

}</span>
在实体类StateCouncilFile中定义来文单位字段
<span style="font-size:18px;">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;
    }
   
}
</span>
对StateCouncilFile这个实体赋值(枚举类)的值的赋值方式
<span style="font-size:18px;"> //设置国务院的子类值
    private void setState(JSONObject preceInfo, List<AppendFile> 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"));
        }
        </span>
然后将实体类对象通过持久化到数据库中,查询满足条件的实体对象的时候返回数据时候如果是直接用json对象来返回该实体StateCouncilFile 时候,里面的枚举类型的字段会为空,此时我们需要转换json数据和对象(枚举类)之间进行转换。以下有两种方式

json与对象(枚举类对象)的转换方式1:

在pom文件中加入依赖:

<span style="font-size:18px;">	 <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.3.1</version>
     </dependency>  </span>

然后直接new一个Gson对象,将满足条件的实体的list集合用Gson对象的toGson方法来输出对象(示例代码)
<span style="font-size:18px;">//通过Gson方式来实现枚举类型与json数据的互相转换
        Gson gson=new Gson();
        String json=gson.toJson(messages);</span>
json与对象的转换方式2:该种方式可以实现直接将一个json数据转为一个实体对象,省去了对实体中的每个字段不断的set值的方式

在pom文件中加入依赖:

<span style="font-size:18px;">	 <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.3.1</version>
     </dependency>  </span>
将json数据转化为实体对象方式:下面的News是一个对象,preceInfo是前端传来的New对象的字段值,直接调用mapper中的readValue()方法将json数据转为一个实体对象
<span style="font-size:18px;">//使用jackson实现对象与实体之间的转换
			ObjectMapper mapper=new ObjectMapper();
			mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);
			news= mapper.readValue(preceInfo.toString(), News.class);
			news = newsService.publish(news);</span>
将对象(枚举类)转为一个json数据:

<span style="font-size:18px;">此处将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);</span>

另外再赋一种方式:将json对象转为实体的方式

在pom文件中加入依赖:

<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值