`
lovechenxue
  • 浏览: 56587 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

JsonFormat注解不生效问题

 
阅读更多
springmvc学习笔记--json--返回json的日期格式问题
(一)输出json数据
springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点:

1.使用mvc:annotation-driven
2.在依赖管理中添加jackson-mapper-asl
1 <dependency>
2         <groupId>org.codehaus.jackson</groupId>
3         <artifactId>jackson-mapper-asl</artifactId>
4         <version>${jackson.version}</version>
5 </dependency>
3.使用注解@ResponseBody
mvc:annotation-driven默认加载了json转换器,我们添加了上面的依赖包后就可以使用注解@ResponseBody来返回json数据,比如:

复制代码
1 @RequestMapping("json")
2     @ResponseBody
3     public List<User> userList(ModelMap modelMap){
4         UserExample example = new UserExample();
5         example.createCriteria().andUsernameIsNotNull();
6         List<User> users = userMapper.selectByExample(example);
7         return users;
8     }
复制代码

(二)格式化json输出的日期格式
上面虽然输出了json,但json的date类型的属性都是long值,像在页面取出是国外的日期格式一样,我们需要加一个格式转换,将日期的格式转换成想要的格式:yyyy-MM-dd。

1.使用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
在实体类的getter方法上面添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 就可以将json的日期格式化。

我第一次尝试总是失败,后来添加完整的依赖包后成功,需要添加如下几个依赖:

复制代码
1 <!-- json数据 -->
2         <dependency>
3             <groupId>org.codehaus.jackson</groupId>
4             <artifactId>jackson-mapper-asl</artifactId>
5             <version>${jackson.version}</version>
6         </dependency>
7         <dependency>
8             <groupId>com.fasterxml.jackson.core</groupId>
9             <artifactId>jackson-core</artifactId>
10             <version>${jackson.core.version}</version>
11         </dependency>
12         <dependency>
13             <groupId>com.fasterxml.jackson.core</groupId>
14             <artifactId>jackson-databind</artifactId>
15             <version>${jackson.core.version}</version>
16         </dependency>
17
18
19 <properties>
20         <jackson.version>1.9.13</jackson.version>
21         <jackson.core.version>2.4.2</jackson.core.version>
22 </properties>
复制代码
优点是简单方便,缺点是需要在每个需要的属性的getter方法上面添加。宏观的看比较繁琐,但实际开发中也就一行代码的事情,唯一不好的是mybatis自动生成实体类会覆盖。

2.继承ObjectMapper来实现返回json字符串
参考:http://aokunsang.iteye.com/blog/1878985

在上面的方法中虽然简单方便,但缺点也很明显,自动生成代码会覆盖实体类,而且每个日期属性都要手动添加,实际中日期属性又是普遍必备。因此,大可全局处理,统一格式。这里需要说下,在数据库中的date和timestamp都会被mybatis转换成date对象。至于生日精确到日、时间精确到到秒的格式规范可以让显示层做处理。统一成yyyy-MM-dd HH:mm:ss

MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。

2.1编写子类继承ObjectMapper
复制代码
1 package com.demo.common.util.converter;
2
3 import org.codehaus.jackson.JsonGenerator;
4 import org.codehaus.jackson.JsonProcessingException;
5 import org.codehaus.jackson.map.JsonSerializer;
6 import org.codehaus.jackson.map.ObjectMapper;
7 import org.codehaus.jackson.map.SerializerProvider;
8 import org.codehaus.jackson.map.ser.CustomSerializerFactory;
9
10 import java.io.IOException;
11 import java.text.SimpleDateFormat;
12 import java.util.Date;
13
14 /**
15  * 解决Date类型返回json格式为自定义格式
16  * Created by Administrator on 2016/2/14.
17  */
18 public class CustomJsonDateConverter extends ObjectMapper {
19     public CustomJsonDateConverter(){
20         CustomSerializerFactory factory = new CustomSerializerFactory();
21         factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){
22             @Override
23             public void serialize(Date value,
24                                   JsonGenerator jsonGenerator,
25                                   SerializerProvider provider)
26                     throws IOException {
27                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
28                 jsonGenerator.writeString(sdf.format(value));
29             }
30         });
31         this.setSerializerFactory(factory);
32     }
33 }
复制代码
2.2配置spring文件
复制代码
1 <mvc:annotation-driven>
2         <mvc:message-converters>
3             <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
4                 <property name="objectMapper" ref="customObjectMapper"></property>
5             </bean>
6         </mvc:message-converters>
7     </mvc:annotation-driven>
8     <bean id="customObjectMapper" class="com.demo.common.util.converter.CustomJsonDateConverter"></bean>
复制代码
2.3显示层自主决定日期类型长度
这个配置无法和上一个@JsonFormat共同使用。由于全局统一了日期格式,date和datetime以及timestamp都是一个格式,如果生日等date字段需要精简,只能在显示层裁剪。

3.使用内置的日期格式化工具
同样是全局设置json响应的日期格式,但此方法可以和@JsonFormat共存,也就是说可以全局设置一个格式,特定的需求可以使用注解设置。

3.1配置spring文件
复制代码
<mvc:annotation-driven> 
    <!-- 处理responseBody 里面日期类型 --> 
        <mvc:message-converters> 
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
                <property name="objectMapper"> 
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 
                        <property name="dateFormat"> 
                            <bean class="java.text.SimpleDateFormat"> 
                                <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> 
                            </bean> 
                        </property> 
                    </bean> 
                </property> 
            </bean> 
        </mvc:message-converters> 
    </mvc:annotation-driven>
复制代码
3.2配置特定的date
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
    public Date getBirth() {
        return birth;
    }
3.3最终




So do it,and change it,no regret!
分享到:
评论

相关推荐

    JsonFormat java android

    然而,它们并不提供直观的格式化功能,这就是"JsonFormat"工具的用武之地。开发者可以使用此工具来查看和检查在应用中生成或接收的JSON数据,确保其正确性和规范性。 对于Windows用户,"JsonFormat.exe"是该工具的...

    @JsonFormat的使用jackson-annotations

    本文将深入探讨`@JsonFormat`注解的使用,以及它在Jackson库中的作用,特别是与`jackson-annotations.jar`、`jackson-core.jar`和`jackson-databind.jar`这三个核心组件的关系。 首先,让我们了解Jackson的基本构成...

    JsonFormat.js(editplus格式化 json插件)

    editplus格式化 json插件 使用:自定义工具 》命令 》Cscript.exe /nologo "D:\JsonFormat.js" 注意地址需要用引号

    JsonFormat.zip

    对于大型或复杂的JSON数据,这样的工具尤其有用,因为它能帮助开发者快速定位问题,节省了手动检查的时间。 总之,JsonFormat.zip提供的JSON解析工具是开发者处理JSON数据的得力助手,通过其丰富的功能,可以简化...

    Java对象转json JsonFormat注解

    解决方法二提到,即使不提供getter方法,只需在字段上添加`JsonFormat`注解,Jackson也会尝试序列化该字段。这是因为`JsonFormat`注解告诉Jackson应该处理这个字段,即使它没有getter。然而,这并不是一种推荐的做法...

    JsonFormat格式化工具

    JsonFormat格式化工具,优化调整格式视图,好用速来,

    JSON解析 JsonFormat

    日常开发中,使用JSON格式的数据情景很多。一开始使用网页的小工具,但用的多了,还是想有一个小工具,能直接快速打开。 支持解析文件 支持解析纯文本,并统计出行列,字符数。提供格式化JSON。 支持搜索,搜索...

    @DateTimeFormat 和 @JsonFormat 注解.txt

    入参与出参日期解析

    win 10 环境下Json format 字符串本地格式化工具

    3. **错误检测**:如果输入的JSON字符串存在语法错误,工具通常会提供错误提示,帮助用户找到问题所在。 4. **复制与粘贴**:支持直接从剪贴板复制JSON数据并粘贴到工具中,也允许将格式化后的JSON数据导出到文件或...

    JSONFormat.exe

    基于Java Swing的json字符串格式化工具,敏捷,高效,即时即用 基于Java Swing的json字符串格式化工具,敏捷,高效,即时即用

    JsonFormat与@DateTimeFormat注解实例解析

    `JsonFormat` 和 `@DateTimeFormat` 这两个注解分别来自于Jackson库和Spring框架,它们都用于处理日期时间的格式化,但应用场景略有不同。 ## 1. `@JsonFormat` 注解 `@JsonFormat` 是Jackson库中的注解,主要用于...

    Notepad ++ 离线安装JsonFormat插件:NPPJSONViewer.zip

    Notepad ++ 离线安装JsonFormat插件,安装方法:打开Notepad++, 点击菜单栏“插件”,下拉点击“打开插件文件夹...”,把NPPJSONViewer.zip复制到打开窗口,解压,重启Notepad++就OK了。

    jpush.dll 修改了should be JSON format的bug

    这是之前在网上下载的一个dll, 在使用的时候 传入extras的参数时,正确的json格式会报 should be JSON format的错误, 后面自己反编译之后, 修改了一下, 现在在传参时, title, content 均为string即可, extras...

    JsonFormat.exe

    JSON格式转换软件适用于json格式转换和字符串长度的各项统计

    jsonformat.exe

    json离线解析格式化工具:当没有网络的时候,可以使用该工具实现json解析格式化。基于Python语言写的。

    JsonFormat.rar

    "参数太多、调用失败、格式问题分析"这部分描述可能是指在使用JsonFormat.exe或其他与JSON相关的程序时遇到的常见问题。参数太多可能意味着用户在调用该工具时输入了过多或不正确的命令行参数,导致程序无法正常运行...

    JSONFormat-master.zip

    总的来说,JSONFormat-master是一个方便实用的工具,它简化了JSON数据的查看和管理工作,体现了便捷性和易用性,是开发和分析工作中不可或缺的辅助工具。无论是在前端开发、后端调试,还是数据分析场景中,都能发挥...

    jsonFormat:json格式

    JSON(JavaScript Object Notation)是一种轻量级的...总的来说,JSON因其简洁、易读、跨平台的特性,已经成为现代Web开发中不可或缺的数据交换格式。无论是客户端还是服务器端的开发,理解和掌握JSON格式都至关重要。

    Json.Prettify.rar_JSON_conditionwrz_json format

    5. JSON数据不能包含注释。 在处理JSON时,我们需要确保数据遵循这些规则,否则解析器可能会抛出错误。此外,JSON也有安全性方面的考虑,比如防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等。 总结起来,"Json....

Global site tag (gtag.js) - Google Analytics