阿里Fastjson:搞定json字符串转对象首字母大写的问题/格式化日期显示时间戳的问题

 

世界之大,无奇不有。

 

问题一:json字符串格式化成对象首字母大写的问题

 

虽然java规范明确规定字段名称首字母必须小写。但是实际开发中,总能遇到接口方强行定义成大写的情况。

针对这种特殊的业务场景,如何保证:

1,正常接收接口入参

2,符合java开发规范(字段名首字母小写)

答案是:使用阿里fastjson即可。思路是:使用注解@JSONField(name = "id"),假如接口传过来的字段名是:Name,

那我们可以这样来处理:

    @JSONField(name = "Name")
    private String name;

我这里使用的版本是:fastjson-1.2.41-sources.jar。

 

问题二:JSON.toJSONString(str)对json进行格式化,日期格式显示时间戳的问题

 

另外FastJson还有一个需要注意的点:使用JSON.toJSONString(str)对json进行格式化时,

如果字段类型是Date,会转化成时间戳格式进行显示。

如何避免这种问题呢?答案是使用JSON.toJSONStringWithDateFormat(str, "yyyy-MM-dd HH:mm:ss");

如果字段类型是java8的LocalDateTime,是可以显示日期的。

 

package com.yangcq.learning.hantang.utils;

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Slf4j
public class FastJsonUtils {


    public static void main(String[] args) {

        List<User> users = new ArrayList<>();
        User user = new User();
        user.setTime(LocalDateTime.now());
        user.setDate(new Date());
        users.add(user);

        // 运行结果:[{"date":1604286810174,"time":"2020-11-02T11:13:30.173"}]
        log.info("{}", JSON.toJSONString(users));

        // 对java 6 Date进行格式化
        // 运行结果:[{"date":"2020-11-02 11:15:48","time":"2020-11-02 11:15:48"}]
        log.info("{}", JSON.toJSONStringWithDateFormat(users, "yyyy-MM-dd HH:mm:ss"));

        // 运行结果有点出乎意料,toJSONStringWithDateFormat对所有日期进行了格式化,
        // 包括java 6 Date和java 8 LocalDateTime

    }
}

@Data
class User {

    /**
     * java 8 LocalDateTime
     */
    private LocalDateTime time;

    /**
     * java 6 Date
     */
    private Date date;
}

 

当然,也可以使用注解的方式来搞定,使用Fastjson提供的@JsonFiled注解,代码如下:

 

package com.yangcq.learning.hantang.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Slf4j
public class FastJsonUtils2 {


    public static void main(String[] args) {

        List<UserDto> users = new ArrayList<>();
        UserDto user = new UserDto();
        user.setTime(LocalDateTime.now());
        user.setDate(new Date());
        users.add(user);

        // 运行结果:[{"date":"2020-11-02 11:43:43","time":"2020-11-02 11:43:43"}]
        log.info("{}", JSON.toJSONString(users));

    }
}

@Data
class UserDto {

    /**
     * java 8 LocalDateTime
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime time;

    /**
     * java 6 Date
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date date;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值