@JsonComponent
public classFooJsonComponent{
public static class Serializer extends JsonSerializer<Stu> {
public void serialize(Stu value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
gen.writeString("name=" + value.getName() + ",age=" + value.getAge());
}
}
public static class Deserializer extends JsonDeserializer<Stu> {
public Stu deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonToken t = p.getCurrentToken();
if (t == JsonToken.VALUE_STRING) {
String trim = p.getText().trim();
String[] split = trim.split(",");
Stu stu = new Stu();
stu.setName(split[0].split("=")[1]);
stu.setAge(Integer.parseInt(split[1].split("=")[1]));
return stu;
}
return (Stu) ctxt.handleUnexpectedToken(handledType(), p);
}
}
}
/**
测试自定义的@JsonComponent*/
@ContextConfiguration(classes = {JsonComponentJacksonTest.class, FooJsonComponent.class})
@JsonTest
public classJsonComponentJacksonTestextendsAbstractTestNGSpringContextTests{
@Autowired
private JacksonTester json;
@Test
publicvoidtestSerialize()throwsException{
Stu details = new Stu("zhangsan", 12);
assertThat(this.json.write(details).getJson()).isEqualTo(""name=zhangsan,age=12"");
}
@Test
publicvoidtestDeserialize()throwsException{
String content = ""name=zhangsan,age=13"";
Stu actual = this.json.parseObject(content);
assertThat(actual).isEqualTo(new Stu("zhangsan", 13));
assertThat(actual.getName()).isEqualTo("zhangsan");
assertThat(actual.getAge()).isEqualTo(13);
}
}