- 浏览: 807260 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (360)
- Java (101)
- JPA/Hibernate (10)
- Spring (14)
- Flex/BlazeDS (37)
- Database (30)
- Lucene/Solr/Nutch (0)
- Maven/Ant (25)
- CXF/WebService (3)
- RPC/RMI/SOAP/WSDL (1)
- REST (6)
- TDD/BDD/JUnit (1)
- Servlet/JSP (2)
- AI/MachineLearning (3)
- Resource (1)
- 字符编码 (2)
- OOA/OOPS/UML (5)
- DesignPattern (8)
- 算法与数据结构 (11)
- Web&App Server (13)
- 并发&异步&无阻塞 (7)
- Entertainment (4)
- JavaScript/ExtJS (45)
- CodeStyle&Quality (1)
- svn/git/perforce (8)
- JSON (2)
- JavaScriptTesting (4)
- Others (6)
- RegularExpression (2)
- Linux/Windows (12)
- Protocal (2)
- Celebrities (1)
- Interview (1)
- 计算机语言 (1)
- English (2)
- Eclipse (5)
- TimeZone/时区 (1)
- Finance (1)
- 信息安全 (1)
- JMS/MQ (2)
- XSD/XML/DTD (3)
- Android (4)
- 投资 (3)
- Distribution (3)
- Excel (1)
最新评论
-
qdujunjie:
如果把m换成具体的数字,比如4或者5,会让读者更明白
m阶B树中“阶”的含义 -
java-admin:
不错,加油,多写点文章
关于Extjs的mixins和plugin -
xiehuaidong880827:
你好,我用sencha cmd打包完本地工程后,把app.js ...
ExtJS使用Sencha Cmd合并javascript文件为一个文件 -
KIWIFLY:
lwpan 写道inverse = "true&qu ...
Hibernate中什么时候使用inverse=true -
luedipiaofeng:
good
消除IE stop running this script弹出框
原文链接:https://blog.csdn.net/liuxiao723846/article/details/42921333
new way reference
https://blog.csdn.net/z69183787/article/details/79317443
public class User {
public int id;
public String name;
}
public class Item {
public int id;
public String itemName;
public User owner;
}
JACKSON一般的使用很容易,如;
Item myItem = new Item(1, "theItem", new User(2, "theUser"));
String serialized = new ObjectMapper().writeValueAsString(myItem);
结果为:
{
"id": 1,
"itemName": "theItem",
"owner": {
"id": 2,
"name": "theUser"
}
}
如果要输出为如下的样子,比如;
{
"id": 25,
"itemName": "FEDUfRgS",
"owner": 15
}
则要自定义了,要继承JsonSerializer类,如下:
public class ItemSerializer extends JsonSerializer<Item> {
@Override
public void serialize(Item value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeNumberField("id", value.id);
jgen.writeStringField("itemName", value.itemName);
jgen.writeNumberField("owner", value.owner.id);
jgen.writeEndObject();
}
}
然后
Item myItem = new Item(1, "theItem", new User(2, "theUser"));
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Item.class, new ItemSerializer());
mapper.registerModule(module);
String serialized = mapper.writeValueAsString(myItem);
简单点的方法为:
@JsonSerialize(using = ItemSerializer.class)
public class Item {
...
}
就是使用注解@JsonSerialize,然后:
Item myItem = new Item(1, "theItem", new User(2, "theUser"));
String serialized = new ObjectMapper().writeValueAsString(myItem);
接下来看如何反序列化了,
同样,要反序列化的两个pojo为:
public class User {
public int id;
public String name;
}
public class Item {
public int id;
public String itemName;
public User owner;
}
反序列化代码为:
Item itemWithOwner = new ObjectMapper().readValue(json, Item.class);
如果要自定义反序列化,比如要反序列化的JSON为;
{
"id": 1,
"itemName": "theItem",
"owner": 2
}
则上面这样会报错:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "createdBy" (class org.baeldung.jackson.dtos.Item),
not marked as ignorable (3 known properties: "id", "owner", "itemName"])
at [Source: java.io.StringReader@53c7a917; line: 1, column: 43]
(through reference chain: org.baeldung.jackson.dtos.Item["createdBy"])
代码:
public class ItemDeserializer extends JsonDeserializer<Item> {
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
int id = (Integer) ((IntNode) node.get("id")).numberValue();
String itemName = node.get("itemName").asText();
int userId = (Integer) ((IntNode) node.get("id")).numberValue();
return new Item(id, itemName, new User(userId, null));
}
}
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Item.class, new ItemDeserializer());
mapper.registerModule(module);
Item readValue = mapper.readValue(json, Item.class);
也可以用注解:
@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
...
}
发表评论
-
sapjco3 notes
2019-03-21 14:51 1172sapjco https://support.sap.com/ ... -
使用RestTemplate发送post JSON请求
2019-01-12 17:30 4759private final String BASE_URL = ... -
使用RestTemplate发送post JSON请求
2019-01-12 17:30 3541private final String BASE_URL = ... -
Spring线程池ThreadPoolTaskExecutor
2018-08-06 09:51 1907<!-- spring thread pool ex ... -
Spring注解事物@Transactional不工作
2018-08-02 18:50 2693“In proxy mode (which is the de ... -
创建前缀索引报长度超出错误
2018-07-25 15:44 1741表结构定义如下: CREATE TABLE `sku` ( ` ... -
Mysql Varchar字符长度
2018-07-25 15:23 1357`sku_name` VARCHAR(200) NOT NUL ... -
使用 Spring RestTemplate 发送 post 请求
2018-07-23 18:49 11734注意点: 1)使用MultiValueMap设置入参,不要使 ... -
Java动态代理Dynamic Proxy
2018-07-21 16:33 835JAVA学习篇--静态代理VS动态代理 https://blo ... -
分布式实时日志分析解决方案 ELK 部署架构
2018-07-20 09:52 1196原文链接:http://www.importn ... -
为什么HashMap容量一定要为2的幂呢?
2018-07-19 10:07 1734原文链接:https://blog.csdn.net/wang ... -
为什么计算HashCode时通常选择31这个数?
2018-07-19 10:05 1428摘自http://www.importnew.com/2208 ... -
Pay special attention when modifying online running system
2017-06-23 10:25 0Never remove any properties, me ... -
Map中的Null key, Null Value
2017-06-14 10:52 1951ConcurrentHashMap的key和value都不能为 ... -
Java语法糖
2017-06-05 20:03 535Java语法糖之foreach http://www.imp ... -
Java集合相关
2017-05-24 17:55 0Java集合框架:ArrayList http://www. ... -
Java数据类型的转换:隐式(自动)转换与强制转换
2017-05-14 10:46 0http://blog.csdn.net/u011240877 ... -
分布式开放消息系统(RocketMQ)的原理与实践
2017-05-07 19:55 739分布式开放消息系统(RocketMQ)的原理与实践 http ... -
面试知识点复习(Interview knowledge review)
2017-05-07 18:39 0JVM,多线程相关知识 http://darrenzhu.it ... -
Netty
2017-05-02 20:09 470http://www.iteye.com/magazines/ ...
相关推荐
在实际开发中,你可能还需要配置`ObjectMapper`以满足特定需求,比如日期格式化、忽略未知属性、自定义序列化策略等。这可以通过设置`ObjectMapper`的配置属性或者使用注解来实现。 为了在项目中使用这些jar包,你...
标题中的“jackson库实现定制化的java序列化反序列化操作”指的是利用Jackson库的能力,通过自定义规则来控制对象的序列化和反序列化过程。这通常涉及到创建自定义的`JsonSerializer`和`JsonDeserializer`,或者使用...
通过自定义反序列化方法,我们可以灵活地处理各种复杂的数据映射需求,将JSON数据准确无误地转换成Java对象,以供后端业务逻辑处理。这一过程不仅涉及到Java反射机制的运用,同时也需要对JSON格式有深入的理解。对于...
此外,FastJson还支持JSON到Java的映射配置,可以自定义字段的序列化和反序列化规则。 2. Gson: Gson是Google提供的一个开源项目,用于在Java对象和JSON数据之间进行映射。Gson可以将任何Java对象转换成对应的...
Jackson自定义序列化和反序列化是提高灵活性和控制JSON转换过程的关键功能。当涉及到枚举类型(enum)时,这种定制尤其重要,因为默认的序列化方式可能不满足所有业务需求。 1. **Jackson库**:Jackson是Java领域最...
4. **自定义序列化**:有时,我们可能希望对序列化过程有更精细的控制,比如忽略某些字段或使用特定的序列化策略。这时可以实现`writeObject()`和`readObject()`方法来自定义序列化行为。 5. **序列化框架**:除了...
三、自定义序列化与反序列化 在某些情况下,我们可能需要对特定的字段或对象进行自定义处理。Jackson和Gson都提供了这样的功能: - Jackson中的`@JsonSerialize`和`@JsonDeserialize`注解可以指定自定义的序列化器...
Jackson还支持注解驱动的映射,允许开发者通过注解来控制序列化和反序列化的具体行为。 这三个库各有特点,Fastjson以其速度和简洁性脱颖而出,Gson则以其灵活性和对复杂类型的处理能力受到青睐,而Jackson则在功能...
2. **脆弱的自定义序列化**:在`readObject`方法中直接执行未经验证的用户输入,可能导致代码执行。 3. **反射滥用**:攻击者可以通过序列化数据控制反射调用,执行敏感方法或构造对象。 4. **第三方库的不安全实现*...
它的使用简单,支持复杂的类型转换,包括泛型、枚举、自定义序列化和反序列化策略。Gson的优势在于其灵活性和强大的类型处理能力,使得它在处理JSON数据时非常便捷。 2. Jackson(FasterXML Jackson): Jackson是...
4. **自定义序列化器和反序列化器**: - `LocalDateTimeSerializer`和`LocalDateSerializer`以及`LocalTimeSerializer`都是Jackson的`JsonSerializer`和`JsonDeserializer`的子类,它们分别用于序列化和反序列化`...
Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的序列化和反序列化功能,能够将Java对象转换为JSON格式的字符串,同时也能将JSON数据转换回Java对象。在这个小例子中,我们将深入探讨如何使用Jackson进行...
本文将深入探讨JSON的序列化与反序列化过程,以及如何使用Gson、FastJson和Jackson这三种流行的Java库来实现这一功能。 一、什么是JSON序列化与反序列化? 1. JSON序列化:序列化是指将Java对象转换为JSON字符串的...
- **只序列化需要的部分**:通过`writeObject()`和`readObject()`方法自定义序列化和反序列化过程,避免序列化整个对象,提高效率。 - **流式序列化**:使用`ObjectStreamClass`和`ObjectStreamConstants`类,可以...
JSON(JavaScript Object ...了解和掌握JSON反序列化的原理、常见库以及注意事项,对于提升开发效率和保证代码质量具有积极意义。在实际工作中,应根据项目需求选择合适的反序列化库,并编写测试用例确保其正确性。
3. **类型安全的反序列化**:Jackson提供了类型令牌(`TypeReference`)或自定义类型解析器(`JsonDeserializer`),以确保反序列化时保持类型安全,尤其是在处理复杂数据结构时。 4. **流式API**:除了基于树模型...
Jackson是Java生态系统中最流行的JSON库之一,提供了高效的序列化和反序列化功能。然而,标准的Jackson库并未直接支持Java的`javax.money`货币类型,这使得处理这类数据时需要额外的适配。 `Jackson-datatype-money...
3. 自定义序列化和反序列化逻辑:对于特殊类型的对象,可能需要提供自定义的序列化和反序列化逻辑。 4. 错误处理:在处理序列化和反序列化时,必须捕获和处理可能出现的异常,如格式错误、类型不匹配等。 在实际...
对于Java对象,推荐使用高效的JSON序列化库,如Jackson或Gson,它们支持配置以优化性能和数据大小。同时,确保在配置`RedisTemplate`时,为key和value指定适当的序列化器,避免使用默认配置,以防止潜在问题。 总之...
在`JacksonCustomizerConfig`类中,通过`@Value`注解读取配置文件中的日期格式,然后使用`Jackson2ObjectMapperBuilderCustomizer`来定制`Jackson`的配置,为特定的日期时间类型设置自定义的序列化和反序列化器。...