首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON格式的SpringBoot、Hibernate和REST -日期格式

JSON格式的SpringBoot、Hibernate和REST -日期格式
EN

Stack Overflow用户
提问于 2018-08-13 08:52:22
回答 2查看 3.2K关注 0票数 1

在REST项目(SpringBoot+Hibernate)中生成的JSON响应中的日期格式存在问题。

当我调用函数时,我得到了这样的JSON:

代码语言:javascript
运行
复制
"rezerwacjaDataOd": 1535580000000,
"rezerwacjaDataDo": 1535839200000,
"rezerwacjaGodzOd": "14:00:00",
"rezerwacjaGodzDo": "12:00:00"

我的实体:

代码语言:javascript
运行
复制
private Date rezerwacjaDataOd;
private Date rezerwacjaDataDo;
private Time rezerwacjaGodzOd;
private Time rezerwacjaGodzDo;

这是java.sql的日期,java.sql的时间

我的控制器:

代码语言:javascript
运行
复制
@RestController
@CrossOrigin
@RequestMapping("api/rezerwacja")
@Api
public class RezerwacjaController {
...
  @GetMapping(value = "/getRezerwacjaById")
  public @ResponseBody
  Rezerwacja getRezerwacjaById(Integer id) {
      return rezDao.findOne(id);
  }
...

为什么时间是“12:00”格式,而日期是1535580000000格式?如何使日期成为“”格式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-13 08:56:03

你应该做两件事

  • 在您的spring.jackson.serialization.write-dates-as-timestamps:false中添加application.properties,这将禁用将日期转换为时间戳,而是使用符合ISO-8601的格式。
  • 然后,可以通过用dateOfBirth注释@JsonFormat(pattern="yyyy-MM-dd")属性的getter方法来自定义格式。
票数 6
EN

Stack Overflow用户

发布于 2018-08-13 09:04:43

hibernate持久化的方式不同--数据库中的日期/时间对象与这些对象的使用方式有关。

根据文档,TimeDate的一个薄包装器,它允许底层JPA提供程序使用您注意到的约定保存date对象。

另一方面,您传入的Date对象将直接转换为时间戳,并以这种方式保存。

在这两种情况下,您都可以检索所讨论的值并将其序列化到所需的格式(其中ISO-8601是最好的)。

除了上面提到的解决方案之外,另一个解决方案是创建一个自定义序列化程序来执行此操作。

一个简单的实现是:

代码语言:javascript
运行
复制
public class Iso8601Serializer extends StdSerializer<Date> {

    private static final String ISO_8601_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

    public Iso8601Serializer() {
        this(null);
    }

    public Iso8601Serializer(Class clazz) {
        super(clazz);
    }

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
    throws IOException {
        if (date == null) {
            jsonGenerator.writeNull();
        } else {
            jsonGenerator.writeString(DateFormatUtils.format(date, ISO_8601_FORMAT));
        }
    }

}

此外(这是个人问题),我建议使用普通的Date对象来存储日期,并且将相应的字段注释为@Temporal

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51818521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档