【问题标题】:localdate json binding with yasson implementation in wildfly serverlocaldate json 与 Wildfly 服务器中的 yasson 实现绑定
【发布时间】:2019-10-11 05:34:50
【问题描述】:

如果我在实体类中使用 LocalDate 类型,如果我发送 POST 请求,则会收到以下错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDate` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('1977-01-01')
 at [Source: (io.undertow.servlet.spec.ServletInputStreamImpl); line: 1, column: 533]

如果我从

更改我的属性类型
@JsonbDateFormat("yyyy-MM-dd")
private java.time.LocalDate mydate;

@JsonbDateFormat("yyyy-MM-dd")
private java.util.Date mydate;

有效!

我已经使用 Wildfly 15 和 16(Eclipse Yasson 实现)进行了测试,新的 Java 日期类似乎不适用于 JSON-Bindings。

这是不支持还是我有什么问题?

【问题讨论】:

  • 您是如何尝试解析对象的?杰克逊是个例外,但你提到了亚森。我使用了JsonbBuilder,它对我有用。
  • 我这样注释我的方法:@POST @Consumes(MediaType.APPLICATION_JSON) public Response add(@Valid Customer newCustomer, @Context UriInfo uriInfo) { ... }。不应该被wildfly服务器的框架自动解析吗?它与 java.util.Date 类似。
  • 需要注意的是,这里没有使用 Yasson,而是使用了 Jackson。我更改了测试以使用类似的参数,它似乎对我有用。您是否碰巧拥有某种复制器?
  • 我的客户实体使用 javax.xml.bind.annoation.XmlRootElement 进行了注释。如果我从客户实体中删除此注释,它将起作用:-)

标签: json wildfly localdate jsonb-api yasson


【解决方案1】:

在我的例子中,我在 java.util.Date 字段中添加了这个注解,这很有效;

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date myDateField;

模式值应采用所有时间单位;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2018-10-27
    • 2015-02-13
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多