Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义和不同的json日期格式_Java_Json - Fatal编程技术网

Java 自定义和不同的json日期格式

Java 自定义和不同的json日期格式,java,json,Java,Json,我发现了如何自定义ObjectMapper日期格式,以便让Spring在我想将对象返回到客户端时帮助自动序列化/反序列化序列化,在请求主体为json对象时反序列化,但我有很多不同日期格式的DTO,有些可能需要yyyy-mm-dd,有些是dd-mm-yyyy,一个ObjectMapper不适用于不同的所需日期格式,解决此问题的最佳实践解决方案是什么 @Override public void configureMessageConverters(List<HttpMessageConvert

我发现了如何自定义ObjectMapper日期格式,以便让Spring在我想将对象返回到客户端时帮助自动序列化/反序列化序列化,在请求主体为json对象时反序列化,但我有很多不同日期格式的DTO,有些可能需要yyyy-mm-dd,有些是dd-mm-yyyy,一个ObjectMapper不适用于不同的所需日期格式,解决此问题的最佳实践解决方案是什么

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    super.configureMessageConverters(converters);
    converters.add(mappingJacksonHttpMessageConverter());
}

MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter() {
    MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter = new MappingJacksonHttpMessageConverter();
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setDateFormat(new SimpleDateFormat("dd-MM-yyyy"));
    objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
    mappingJacksonHttpMessageConverter.setObjectMapper(objectMapper);
    mappingJacksonHttpMessageConverter.setPrettyPrint(true);
    return mappingJacksonHttpMessageConverter;
}

您可以使用自定义序列化程序并在单个序列化程序中处理不同的格式。以下几页介绍了如何创建自定义序列化程序/反序列化程序:

-编辑-

从映射JacksonHttpMessageConverter中添加了一些重点:

setObjectMapper public void setObjectMapper(org.codehaus.jackson.map.ObjectMapper objectMapper) Set the ObjectMapper for this view. If not set, a default ObjectMapper is used. Setting a custom-configured ObjectMapper is one way to take further control of the JSON serialization process. For example, an extended SerializerFactory can be configured that provides custom serializers for specific types. The other option for refining the serialization process is to use Jackson's provided annotations on the types to be serialized, in which case a custom-configured ObjectMapper is unnecessary. 通过注释定义对象的序列化程序

用于反序列化

创建一个StdDeserializer对象来处理您感兴趣的类型


您是否有不同的POJO映射到DTO,或者使用相同的POJO映射不同的DTO?呃。。。在控制器中,我只使用DTO,我的POJO是数据库实体。我不知道你说的映射是什么意思?我说的是在你的DTOSO存储库层中映射的POJO是的,我只有很少的POJO实体,因为我的表单数据或返回的数据与POJO实体不一样,所以我创建了很多DTO,这些DTO几乎与POJO相同,但有些可能不同,DTO包含一些验证逻辑。@harshavmb是的,我已经尝试过了,注释的优先级确实高于全局ObjectMapper配置。
public class ItemSerializer extends StdSerializer<Item> {
    // ...

    @Override
    public void serialize(Item value, JsonGenerator jgen, SerializerProvider provider) {
        // Write the Item data into the JsonGenerator
    }
}
@JsonSerialize(using = ItemSerializer.class)
public class Item {
    // ...
}
public class ItemDeserializer extends StdDeserializer<Item> { 
    // ... 

    @Override
    public Item deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        // Handle the different date formats here!

        return new Item(/*parsed date object*/);
    }
}
@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
    // ...
}