d
import java.io.IOException; import org.apache.commons.lang.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonTokenId; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer; /** * 支持多种日期格式的解析 */ @SuppressWarnings("deprecation") class CustomDateDeseralizer extends UntypedObjectDeserializer { Logger logger = LoggerFactory.getLogger(getClass()); private static final long serialVersionUID = -2275951539867772400L; @Override public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { if (jp.getCurrentTokenId() == JsonTokenId.ID_STRING) { try { return DateUtils.parseDate(jp.getText(), new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "MM/dd/yyyy", "yyyy.MM.dd G 'at' HH:mm:ss z", "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz"}); } catch (Exception e) { logger.error(e.getMessage(), e); return super.deserialize(jp, ctxt); } } else { return super.deserialize(jp, ctxt); } } }
import java.text.SimpleDateFormat; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; /** * json与java对象之间转化器 * * @version 1.0.0 * @since 2014年10月21日 下午3:11:39 */ public final class JsonObjectMapper extends ObjectMapper { /** */ private static final long serialVersionUID = 4563671462132723274L; public JsonObjectMapper() { super(); // 从JSON到java object // 没有匹配的属性名称时不作失败处理 this.configure(MapperFeature.AUTO_DETECT_FIELDS, true); // 反序列化 // 禁止遇到空原始类型时抛出异常,用默认值代替。 this.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false); this.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true); // 禁止遇到未知(新)属性时报错,支持兼容扩展 this.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); this.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false); this.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); // 按时间戳格式读取日期 // this.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, true); this.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); this.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true); this.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); // 序列化 // 禁止序列化空值 this.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); this.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true); this.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, true); // 按时间戳格式生成日期 // this.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, true); this.configure(SerializationFeature.FLUSH_AFTER_WRITE_VALUE, true); this.configure(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN, true); // 不包含空值属性 this.setSerializationInclusion(Include.NON_EMPTY); this.setSerializationInclusion(Include.NON_NULL); // this.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true); // 是否缩放排列输出,默认false,有些场合为了便于排版阅读则需要对输出做缩放排列 this.configure(SerializationFeature.INDENT_OUTPUT, false); // 设置全局的时间转化 SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); this.setDateFormat(smt); // 设置日期反序列化组件 SimpleModule dateDeserializerModule = new SimpleModule(); dateDeserializerModule.addDeserializer(Object.class, new CustomDateDeseralizer()); this.registerModule(dateDeserializerModule); // 注意:不要开启序列化和反序列化时为对象附加@class属性(坑) // this.enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, As.PROPERTY); } }
/** * 测试objectMapper特性 * * @version 1.0.0 * @since 2015年3月2日 下午2:02:05 * @param <T> 泛型参数 */ @JsonAutoDetect(fieldVisibility = Visibility.ANY) //只包含非空属性 @JsonInclude(Include.NON_NULL) @JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY) public class Msg<T> { @JsonProperty(required = false, value = "code") private String code; /** 消息内容 */ @JsonProperty(required = false, value = "msg") private String msg; @JsonProperty(required = false, value = "name") String name; @JsonProperty(required = false, value = "payload") @JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY) T payload; public T getPayload() { return payload; } public void setPayload(T payload) { this.payload = payload; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
/** * 测试objectMapper特性 * * @version 1.0.0 * @since 2015年3月2日 下午2:02:05 * @param <T> d */ @JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY) public class TypeMap<T> { @JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY) //指示Map的value是使用@JsonTypeInfo进行解析 Map<String, T> map = new HashMap<String, T>(); public Map<String, T> getMap() { return map; } public void setMap(Map<String, T> map) { this.map = map; } }
import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo.As; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; /** * 测试类 * * @version 1.0.0 * @since 2015年2月5日 上午10:32:38 */ @JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY) public class User implements Serializable { private String id; private String name; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo.As; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; /** * 测试类 * * @version 1.0.0 * @since 2015年2月5日 上午10:32:38 */ @JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY) public class User1 implements Serializable { /** */ private static final long serialVersionUID = 5723985672168696454L; private String id; private String name; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
d
相关推荐
为了实现这一点,ObjectMapper允许开发者注册自定义的反序列化器(JsonDeserializer),以便对特定类型的字段进行特殊处理。这在处理复杂的数据结构或者需要进行特殊格式转换时尤为有用。例如,我们可以编写一个...
除了基本的序列化和反序列化,`ObjectMapper`还支持更复杂的配置,如忽略未知属性、自定义日期格式、处理循环引用、以及配置序列化和反序列化的细节等。例如,如果你想忽略某个字段不参与序列化,可以这样设置: ``...
`ObjectMapper`框架就是这样一个工具,它为Swift开发者提供了一个优雅的方式来映射JSON数据到自定义的模型对象,反之亦然。本文将深入探讨`ObjectMapper`的使用方法、功能和优势,以及如何将其集成到你的iOS项目中。...
总结来说,`Java json工具类`如`Jackson`和`ObjectMapper`,以及开发者自定义的`JacksonUtils`工具类,是Java开发中处理JSON数据的关键工具。它们能够方便地将Java对象和JSON格式数据互相转换,同时提供了一系列高级...
**解决方法二:自定义ObjectMapper** 另一种方法是通过自定义`ObjectMapper`来实现全局的日期时间格式化。我们创建一个名为`JsonUtil`的工具类,继承`ObjectMapper`并注册自定义的`JsonSerializer`: ```java ...
Swift-ObjectMapper是一个强大的工具,专门设计用于Swift编程语言,旨在简化JSON数据与自定义模型对象之间的转换过程。这个框架由Tristan Himmelman创建,它通过提供一个简洁的接口,使得开发者能够快速地实现序列化...
使用ObjectMapper,您可以根据您的复杂对象自动构建XML和SOAP数据包,从而可能节省数百行的序列化代码。 ## Download在这里您可以下载最新的jar。 添加到您的项目中。 ## OMSerailizer ## OMSerailizer是一个...
现在,我们可以直接在Alamofire的请求中使用`responseObject`方法,将JSON数据转换为自定义的对象。 ```swift Alamofire.request("https://api.example.com/users/1").responseObject { (response: Result, AFError...
2. 自定义序列化和反序列化逻辑:使用`JsonSerializer`和`JsonDeserializer`实现自定义转换。 3. 配置选项:可以设置`ObjectMapper`的配置,如日期格式、忽略未知属性等。 4. 集合和Map的转换:直接支持List、Set、...
`ObjectMapper`还允许你通过各种方法进行自定义配置,例如: - `enableDefaultTyping()` 和 `disableDefaultTyping()` 可以控制是否启用默认类型化,用于处理未明确指定类型的序列化和反序列化。 - `configure()` ...
例如,如果要处理JSON字符串,可以使用Jackson库的`ObjectMapper`来反序列化。 - 可选地,实现`getAsText()`方法,如果需要在显示或回显时转换为特定格式的字符串。 - 使用`@InitBinder`注解和`WebDataBinder`的`...
在Java开发中,处理JSON数据是一项常见的任务,而Jackson库是Java中广泛使用的JSON解析库之一,特别是它的ObjectMapper组件,能方便地实现JSON与Java对象之间的相互转换。本教程将深入探讨如何使用Jackson ...
ObjectMapper 是一个用 Swift 编写的框架,它使您可以轻松地将... ObjectMapper 还支持在映射过程中转换值的自定义转换。 要使用转换,只需使用 map["field_name"] 和 <- 运算符右侧的您选择的转换创建一个元组。
例如,可以创建一个`MyEntity`实例,然后使用Jackson的`ObjectMapper`进行序列化和反序列化,观察结果是否符合预期。 总的来说,自定义JSONObject属性过滤注解是一种增强JSON序列化灵活性的方法,能够帮助我们在...
这时,我们可以利用Jackson的`@JsonIgnoreProperties`注解的变体,或者使用自定义的序列化和反序列化模块来实现这一目标。 首先,让我们探讨`@JsonIgnoreProperties`注解。此注解通常用于类级别,它允许我们指定一...
映射期间的自定义转换 结构支持 基础 为了支持映射,一个类或结构只是需要实现Mappable协议,其中包括以下功能: init? ( map : Map) mutating func mapping ( map : Map) ObjectMapper使用<-运算符定义每个...
ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(user); response.getWriter().write(jsonString); } } ``` 在这个例子中,我们创建了一个`UserDataServlet`,当...
Swift中的Moya是一个非常流行的网络请求库,它简化了与Alamofire的集成,并提供了对Swift类型安全的网络层抽象。...在实际开发中,还可以根据需要添加错误处理、自定义请求头、请求参数等功能,以满足更复杂的需求。
在SpringSide项目中,我们通常会自定义`ObjectMapper`以优化性能、增加定制化行为,例如日期格式化、忽略未知属性、添加自定义模块等。这个类可能包含了对Jackson的配置,如注册模块、设置序列化和反序列化策略等。 ...