2017-02-16 37 views
0

Для преобразования объектов Java в JSON и из них мы используем аннотацию по типам enum. Предположим, у нас есть этот тип:Аннотации сопротивления для перечисляемых значений в списке

public enum MyEnum { 
    HELLO, 
    WORLD 
} 

Тогда мы используем его таким образом:

import javax.persistence.EnumType; 
import javax.persistence.Enumerated; 
import java.io.Serializable; 
import java.util.List; 

public class SerializableObject implements Serializable{ 
    @Enumerated(EnumType.STRING) 
    private MyEnum singleValue; 
    // What annotation do I put here? 
    private List<MyEnum> multiValue; 
} 

Мой вопрос: Что аннотацию идет на список multiValue так, что содержащиеся в нем значения перечислений правильно сериализации?

ответ

2

Вы можете использовать EnumType.ORDINAL

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import javax.persistence.EnumType; 
import javax.persistence.Enumerated; 

enum MyEnum { 
    HELLO, WORLD 
} 


public class SerializableObject implements Serializable { 
    @Enumerated(EnumType.STRING) 
    private MyEnum  singleValue; 
    // What annotation do I put here? 
    @Enumerated(EnumType.ORDINAL) 
    private List<MyEnum> multiValue; 


    public void show() { 

     multiValue = new ArrayList<>(Arrays.asList(MyEnum.values())); 
     multiValue.stream().forEach(
       element -> System.out.println(element.ordinal() + " " + element.toString())); 
    } 


    public static void main(String[] args) { 

     new SerializableObject().show(); 
    } 
} 
+0

Могу ли я использовать 'EnumType.String' вместо этого? – hotzst

+0

Да Вы правы, лучше использовать его как EnumType.String. /** Персистировать свойство перечисления или поле в виде целого числа. */ ORDINAL, /** Персистировать свойство или поле типа перечислимого типа как строку. */ STRING от исходного кода – user121290

0

Вот fullcode для выполнения сериализации и Deserialization.Hope это помогает исследовать больше.

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import com.fasterxml.jackson.core.JsonProcessingException; 

enum MyEnum { 
    HELLO, WORLD 
} 



public class SerializableObject implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    @Enumerated(EnumType.ORDINAL) 
    private MyEnum  singleValue; 
    // What annotation do I put here? 
    @Enumerated(EnumType.STRING) 
    private List<MyEnum> multiValue; 


    public void show() { 

     multiValue = new ArrayList<>(Arrays.asList(MyEnum.values())); 
     singleValue=MyEnum.HELLO; 

    } 



    public static void main(String[] args) throws JsonProcessingException { 

     SerializableObject a = new SerializableObject(); 
     a.show(); 
     try { 
      FileOutputStream fileOut = new FileOutputStream("E:\\path\\Crunchify_Test1.txt"); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 

      out.writeObject(a); 
      out.close(); 
      fileOut.close(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     try { 
      FileInputStream fileIn = new FileInputStream("E:\\path\\Crunchify_Test1.txt"); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      // List<MyEnum> multiValue=(List<MyEnum>) in.readObject(); 
      System.out.println("Deserialized Data: \n" + in.readObject().toString()); 
      in.close(); 
      fileIn.close(); 
     } catch (Exception e) { 
     } 
    } 



    @Override 
    public String toString() { 

     return "SerializableObject [singleValue=" + singleValue + ", multiValue=" + multiValue 
       + "]"; 
    } 



} 
Смежные вопросы