Jackson通过ObjectMapper进行Serialize&Deserialize

Jackson序列化与反序列化异常处理,

Serialized Object to String

	@Test
	public void testSerialized() throws JacksonException {
		//Jackson transfer Object tool
		ObjectMapper objMapper = new ObjectMapper();
		List<Buyer> buyers =  new ArrayList<Buyer>(
		List.of(new Buyer("1","Jeff"),new Buyer("2","Kevin")));
		
		Order order = Order.builder()
									.orderID(1)
									.orderName("TSL")
									.buyer(buyers).
									time(new Date())
									.des("Jackson test")
									.build();
		log.info(objMapper.writeValueAsString(order));
	}

{“time”:“2023/05/06 06:37:32”,“orderName”:“TSL”,
“des”:“Jackson test”,“buy”:[{“id”:“1”,“name”:“Jeff”},
{“id”:“2”,“name”:“Kevin”}]}

Deserialized String to Object

Order orderSerialized = objMapper.readValue(
"{\"time\":\"2023/05/06 06:37:32\",
\"orderName\":\"TSL\",\"des\":\"Jackson test\",
\"buy\":[{\"id\":\"1\",\"name\":\"Jeff\"},
{\"id\":\"2\",\"name\":\"Kevin\"}]}", 
Order.class);

System.out.println(orderSerialized);

Exception

在发序列化时,因缺少构造方法抛出InvalidDefinitionException: no Creator, cannot construct instance of object.

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Cannot construct instance of com.book.springtest.Buyer
(no Creators, like default constructor, exist): cannot deserialize
from Object value (no delegate- or property-based Creator)

在这里插入图片描述

/** * JSON format serializer for Nacos configuration task elements. * * <p>This implementation uses {@link ObjectMapper} from the Jackson library to serialize * a list of configuration task elements into a JSON string, or deserialize a JSON string * back into a list of elements. It supports conversion of complex object structures and ensures type safety. * * <p>During serialization, the entire {@link List} is converted into a standard JSON array. * During deserialization, {@link TypeReference} is used to preserve generic type information, * preventing conversion errors due to Java's type erasure. * * @author <a href="mailto:929160069@qq.com">zhangpengfei</a> * @since 3.0.2 */ public class DefaultJSONNacosConfigTaskElementSerializer implements NacosConfigTaskElementSerializer { private final ObjectMapper objectMapper; /** * Constructs a new {@code DefaultJSONNacosConfigTaskElementSerializer} to init a {@link ObjectMapper} * with any default settings. */ public DefaultJSONNacosConfigTaskElementSerializer() { this.objectMapper = new ObjectMapper(); } /** * Constructs a new {@code DefaultJSONNacosConfigTaskElementSerializer} by given {@link ObjectMapper}. * @param objectMapper the given {@link ObjectMapper}. */ public DefaultJSONNacosConfigTaskElementSerializer(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } @Override public String serialize(@NotNull List<ConfigurableTaskElement> elements) throws IOException { return objectMapper.writeValueAsString(elements); } @Override public List<ConfigurableTaskElement> deserialize(@NotNull String configInfo) throws IOException { return objectMapper.readValue(configInfo, new TypeReference<List<ConfigurableTaskElement>>() { }); } @Override public ConfigFormat getConfigFormat() { return ConfigFormat.JSON; } } 现在这个类不单单用于nacos了,抽出来作为数据源保存定时任务调度信息序列化通用的类型了,请你帮我重命名和 修改代码注释内容(修改的注释 先写中文后写英文)
最新发布
11-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值