当返回的数据包含时间戳时,如何通过RestTemplate发布数据?

时间:2017-02-06 20:54:36

标签: json junit timestamp resttemplate

我一直在努力工作几个小时。我有一个名为Location的复杂类,里面有许多非原始成员。只有三个不可为空的成员,所以在JUnit测试中我在POST中发送这个Json来创建类:

{ 
    "verified": true,
    "company": "http://localhost:8080/enums_servicingcompany/PBTI",
    "txCode": "http://localhost:8080/enums_tax/9"
}

发送此代码并获得响应的代码是:

    HttpHeaders headers = new HttpHeaders();
    HttpEntity<?> entity = new HttpEntity<>( locSend, headers ); 
    HttpEntity<String> response = restTemplate.exchange(TestBase.URL + URL, HttpMethod.POST, entity, String.class);
    String result= response.getBody();
    HttpHeaders rheaders = response.getHeaders();

响应带有'Okay HTTP200',但结果包含:

 {"error":"Can not deserialize value of type java.sql.Timestamp from String \"2017-02-06 15:07:17.566\": not a valid representation 
 (error: Failed to parse Date value '2017-02-06 15:07:17.566': Can not parse date \"2017-02-06 15:07:17.566Z\": 
 while it seems to fit format 'yyyy-MM-dd'T'HH:mm:Ss.SSS'Z'', parsing fails (leniency? null))\n at [Source: org.apache.catalina.connector.CoyoteInputStream@290d9d75; line: 1, column: 109]
 (through reference chain: mysite.location.Location[\"availableServicesAsOf\"])"}

它抱怨的日期/时间字符串似乎来自SQL Server数据库,其中特定列在此修改:

ALTER TABLE [dbo].[Location] ADD  CONSTRAINT [DF_Location_AvailableServicesAsOf]  DEFAULT (getdate()) FOR [AvailableServicesAsOf]

服务器端,Location的Java代码包括:

@Column(name="AvailableServicesAsOf", nullable=true)    
private java.sql.Timestamp availableServicesAsOf = new java.sql.Timestamp(java.util.Calendar.getInstance().getTime().getTime());

服务器端被设计为JPARepository,因此所有POST处理都在封面下完成。从POST或GET返回开始:

{
 "creationDate" : null,
 "lastModified" : null,
 "specialhandlingComment" : null,
 "availableServicesAsOf" : "2017-02-06T14:39:52.045+0000",
 "verified" : true,

我已经开始使用restTemplate.postForObject(),它适用于其他类,但它只是“无法转换为所需的对象”,因为我们期望Json并收到错误消息 - 这对于丝毫。

那么我可以做些什么来解决这个问题呢?无法POST数据,我无法创建进行JUnit测试的实例。 (当请求从前端进入时,一切正常。)

令人惊讶的是,我可以执行以下JUnit代码:

    RestTemplate restTemplate = new RestTemplate(); 
    FMT_Location_RCV location = restTemplate.getForObject(TestBase.URL + URL + id, FMT_Location_RCV.class); 

我从位置接收数据没有错误。 avaialableServicesAsOf包含字符串“2017-02-06T21:48:52.285 + 0000”。那么为什么它在GET上成功格式化,但如果我尝试使用相同格式的Java类的postForObject(),它会失败?

0 个答案:

没有答案