/src/test/java/com/alibaba/json/bvt/annotation/DeserializeUsingTest.java
https://github.com/alibaba/fastjson · Java · 71 lines · 53 code · 15 blank · 3 comment · 3 complexity · 3a7cd8b78821f58c105438c3f3b3c228 MD5 · raw file
- package com.alibaba.json.bvt.annotation;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.annotation.JSONField;
- import com.alibaba.fastjson.parser.DefaultJSONParser;
- import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
- import junit.framework.TestCase;
- import java.lang.reflect.Type;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Created by wenshao on 16/9/25.
- */
- public class DeserializeUsingTest extends TestCase {
- public void test_deserializeUsing() throws Exception {
- String jsonStr = "{'subjectList':['CHINESE','MATH']}";
- Teacher teacher = JSON.parseObject(jsonStr, Teacher.class);
- assertEquals(SubjectEnum.CHINESE.ordinal(), teacher.getSubjectList().get(0).intValue());
- assertEquals(SubjectEnum.MATH.ordinal(), teacher.getSubjectList().get(1).intValue());
- }
- public void test_deserializeUsing2() throws Exception {
- String jsonStr = "{'subjectList':['CHINESE','MATH']}";
- Teacher teacher = JSON.parseObject(jsonStr).toJavaObject(Teacher.class);
- assertEquals(SubjectEnum.CHINESE.ordinal(), teacher.getSubjectList().get(0).intValue());
- assertEquals(SubjectEnum.MATH.ordinal(), teacher.getSubjectList().get(1).intValue());
- }
- public static class Teacher {
- @JSONField(deserializeUsing = SubjectListDeserializer.class)
- private List<Integer> subjectList;
- public List<Integer> getSubjectList() {
- return subjectList;
- }
- public void setSubjectList(List<Integer> subjectList) {
- this.subjectList = subjectList;
- }
- }
- public static class SubjectListDeserializer implements ObjectDeserializer {
- @SuppressWarnings("unchecked")
- public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
- List<String> parseObjectList = parser.parseArray(String.class);
- if(parseObjectList != null) {
- List<Integer> resultVoList = new ArrayList<Integer>();
- for(String parseObject : parseObjectList) {
- resultVoList.add(SubjectEnum.valueOf(parseObject).ordinal());
- }
- return (T)resultVoList;
- }
- throw new IllegalStateException();
- }
- public int getFastMatchToken() {
- return 0;
- }
- }
- public static enum SubjectEnum {
- CHINESE, MATH
- }
- }