欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 自定义反序列化过程

自定义反序列化过程

2025/2/23 14:21:54 来源:https://blog.csdn.net/Dy_1748204009/article/details/143778031  浏览:    关键词:自定义反序列化过程

需求:student对象中name属性,序列化时将该属性映射为stuname,反序列化时将 Json中的NAME键值对映射到name属性中

   @AllArgsConstructor@NoArgsConstructor@Getter@Setterstatic class Student {@JsonProperty("stuname")private List<String> name;@JsonProperty("age")private String age;@Overridepublic String toString() {return "Student{" +"name=" + name +", age='" + age + '\'' +'}';}}
public class StudentDeserializer extends JsonDeserializer<Student> {@Overridepublic Student deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {// 自定义反序列化逻辑Student student = new Student();JsonNode node = p.getCodec().readTree(p);JsonNode namesNode = node.get("NAMES");ObjectMapper objectMapper = new ObjectMapper();List<String> names = objectMapper.convertValue(namesNode, objectMapper.getTypeFactory().constructCollectionType(List.class, String.class));JsonNode ageNode = node.get("age");String age = objectMapper.convertValue(ageNode, String.class);student.setName(names);student.setAge(age);return student;}
  @Testpublic void stuTest() throws IOException {ObjectMapper mapper = new ObjectMapper();// 创建一个Student对象并序列化为JSONStudent student = new Student();student.setName(Arrays.asList("John Doe", "Jane Doe"));student.setAge("1");String jsonString = mapper.writeValueAsString(student);System.out.println("Serialized JSON: " + jsonString);// 反序列化JSON字符串为Student对象// 注意这里的JSON字符串中NAMES是一个数组String inputJson = "{\"NAMES\":[\"Alice\", \"Bob\"],\"age\":\"15\"}";// 在 ObjectMapper 上注册反序列化器SimpleModule module = new SimpleModule();module.addDeserializer(Student.class, new StudentDeserializer());mapper.registerModule(module);Student deserializedStudent = mapper.readValue(inputJson, Student.class);System.out.println("Deserialized Student: " + deserializedStudent);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词