当前位置: 首页 > 知识库问答 >
问题:

Rest API调用返回LocalDate错误

穆嘉
2023-03-14

我正在尝试进行rest api调用,但一直收到400错误请求。从日志中可以看出,我的POJO的LocalDate字段之一似乎存在问题。

我的POJO:

public class MyObj implements Serializable {
private Long id;
private String remark;
private LocalDate someDate;
...other fields, getter and setter

在我的main()

MyObj myObj = new MyObj();
myObj .setRemark("My test case");
myObj .setSomeDate( LocalDate.now());
...

 WebResource webResource = client
                .resource("my_url");

        webResource
                .header("apikey", "mykey")
                .accept("application/json")
                .type("application/json")
                .post(MyObj.class, myObj );

运行上述代码时,我得到以下错误:错误的请求:JSON解析错误:需要数组或字符串。;嵌套异常为com。fasterxml。杰克逊。数据绑定。exc.MismatchedInputException:应为数组或字符串。位于[源:(PushbackInputStream);行:1,列:159](通过引用链:com.xxx.MyObj[“someDate”])

知道为什么会发生上述情况吗?


共有2个答案

程树
2023-03-14

您需要注释LocalDate以告诉它应该如何转换为String。这是ZonedDateTime的片段,但您需要做的就是更改掩码以适应LocalDate。

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}

这是原始问题的链接:用于json序列化的Spring Data JPA-ZonedDateTime格式

公羊浩阔
2023-03-14

LocalDate应在序列化时转换为字符串,并在反序列化时转换回LocalDate。为此,您可以在对象LocalDate属性上使用JsonDeserialize和JsonSerialize

@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate someDate;

有关更多信息,请参阅此链接:https://kodejava.org/how-to-format-localdate-object-using-jackson

另一种方法是使用ObjectMapper并注册modul

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());

使用ObjectMapper和类似问题的示例:https://groups.google.com/forum/#!主题/jackson-user/XdHvRKG1vhY

 类似资料:
  • 我正在尝试使用Postman应用程序发送EC2 RestAPI(DescribeInstances)。我在AWS的IAM中创建了一个用户。我为该特定用户生成了AccessKeyId和SecretKey,并为用户提供了“AmazonEC2FullAccess”策略(所有EC2访问)。我在Postman中使用了以下步骤来发送ResAPI: > AccessKey=ACCESSKEYEXAMPLE 点击

  • 我想一次更新文档的所有选项卡。文档的信封是从一个模板创建的,该模板已经定义了收件人和选项卡,我使用以下负载调用这个endpoint来更新选项卡:

  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 问题内容: 我有以下网络服务; 这是库存标准,不更改类装饰器。 我有这个jQuery方法; 这是一个发布操作,因为稍后我需要向其发布数据。 当我执行jQuery时,返回“ No transport”错误。 我还应该提到的一件事是,jQuery存储在我的计算机上的简单HTML文件中,并且WebService也正在我的计算机上运行。 HTML页面上没有代码,它只是一个网页,而不是ac#项目或其他任何代

  • 问题内容: 我正在使用jquery调用ajax wcf方法,该方法将对象列表作为JSON字符串返回。在fiddler2中(在TextView中)检查时,JSON字符串如下所示: 当我在提琴手的JSON视图中检查结果时,它显示以下JSON: 因此,提琴手可以成功解析它,但是在客户端上,jQuery ajax错误回调函数显示以下错误: wcf方法的定义如下: 最后,调用的jQuery是: 提前致谢!

  • 我目前正在一个后端有Spring,前端有Angularjs的网站上工作,我们已经讨论了后端响应以处理前端的消息对话框,我有一个问题要问: 假设我有一个API: 若客户机发出一个带有无效参数(如字符串)的请求,那个么应该从服务器返回哪个响应代码?HTTP 400错误的请求和响应正文包含消息“fromTime和toTime应采用时间戳格式”,还是HTTP 200包含相同的消息? 我看到了一些Googl