xstream 맞춤형 Converter 최적화

3320 단어
list 유형의 사용자 정의 Converter를 최적화하여 매개 변수를 제공하여 Converter를 재사용합니다.
사용자 정의 Converter 수정 선호
public class OrgIDConverter implements Converter {

    //     
    private String nodeName;
    
    //     
    public OrgIDConverter(String nodeName) {
        super();
        this.nodeName = nodeName;
    }
    
	@SuppressWarnings("unchecked")
	public void marshal(Object value, HierarchicalStreamWriter writer,
			MarshallingContext arg2) {
	    //  Object    ,   canConvert     ,    instanceOf  
		List<String> list = (List<String>) value;
		
        for (String subval : list) {
            //            ,   List     converter         
            writer.startNode(nodeName);
            writer.setValue(subval);
            writer.endNode();
        } 
	}

	public Object unmarshal(HierarchicalStreamReader reader,
			UnmarshallingContext context) {
	    //   List  ,    xml orgID     
		List<String> list = new ArrayList<String>();
        while (reader.hasMoreChildren()) {
            reader.moveDown();
            String key = reader.getNodeName();
            String value = null;
            //        ,    else  ,if    orgID      ,    
            if (reader.hasMoreChildren()) {
                value = (String)unmarshal(reader, context);
            } else {
                value = reader.getValue();
            }
            list.add(value);
            reader.moveUp();
        }
        return list;
	}

	public boolean canConvert(Class type) {
	    //     class   ,  :        (List    )
		return type.equals(ArrayList.class); 
	}

}

 
등록 방법을 수정하여 엔티티 클래스에 등록하려면 다음과 같이 하십시오.
public class InfoTest {
    
    public static void main(String[] args) {

        XStream stream = new XStream();
        stream.alias("info", Info.class);
        //      Converter
        stream.registerLocalConverter(Info.class, "orgIDs", new OrgIDConverter("orgID"));
        stream.registerLocalConverter(Info.class, "roleIDs", new OrgIDConverter("roleID"));
//        stream.alias("orgID", String.class);
//        stream.alias("roleID", String.class); ///:xstream       String     ,    String  
        
        
        
        Info info = new Info();
        List<String> orgIDs = new ArrayList<String>();
        orgIDs.add("020120214");
        orgIDs.add("020120215");
        info.setOrgIDs(orgIDs);
        
        List<String> roleIDs = new ArrayList<String>();
        roleIDs.add("020120216");
        roleIDs.add("020120217");
        info.setRoleIDs(roleIDs);
        
        System.out.println(stream.toXML(info));
    }

}

 
이전 기사 링크: http://winnie825.iteye.com/admin/blogs/1432064

좋은 웹페이지 즐겨찾기