package com.alibaba.json.bvt.bug;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
import com.alibaba.fastjson.serializer.SerializeWriter;
import com.alibaba.fastjson.serializer.StringCodec;
import junit.framework.TestCase;
import java.io.IOException;
import java.lang.reflect.Type;
/**
* Created by wenshao on 08/01/2017.
*/
public class Issue963 extends TestCase {
public void test_for_issue() throws Exception {
Mock mock = JSON.parseObject("{\"type\":\"boolean\"}", Mock.class);
assertEquals(EnumType.BOOLEAN, mock.getType());
}
public enum EnumType {
BOOLEAN;
@Override
public String toString() {
return name().toLowerCase();
}
}
public static class Mock {
@JSONField(serializeUsing = EnumTypeCodec.class, deserializeUsing = EnumTypeCodec.class)
private EnumType type;
public EnumType getType() {
return type;
}
public void setType(EnumType type) {
this.type = type;
}
}
public static class EnumTypeCodec implements ObjectSerializer, ObjectDeserializer {
public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
String uncasedSensitive = StringCodec.instance.deserialze(parser, type, fieldName);
return (T) EnumType.valueOf(uncasedSensitive.toUpperCase());
}
public int getFastMatchToken() {
return JSONToken.LITERAL_STRING;
}
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.out;
if (object == null) {
out.writeNull();
return;
}
StringCodec.instance.write(serializer, ((EnumType) object).name().toLowerCase(), fieldName, fieldType, features);
}
}
}