gpt4 book ai didi

java - Java 时间戳的奇怪问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:03 26 4
gpt4 key购买 nike

我正在开发一个将对象发送到服务器进行处理的应用程序。使用 Spring 以 JSON 格式发送对象。

我的问题是所有字段都正确传递 - 除了日期变量。它们显示为完全不同的值,我很困惑为什么。

这是被传递的对象的缩写版本:

public class TransactionParameters {

public Date startDate;
public Date endDate;
public List<String> transactionCodes;
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public List<String> getTransactionCodes() {
return transactionCodes;
}
public void setTransactionCodes(List<String> transactionCodes) {
this.transactionCodes = transactionCodes;
}

}

这是创建的 JSON:

{"transactionCodes":["195"],"startDate":1524456000000,"endDate":1524456000000}

这是客户端代码:

String responseString =
restTemplate.postForObject("http://localhost:9080/app/transaction"
+ "testUser123", transactionParameters, String.class);

这是服务器代码:

@ApiOperation(value="Get Transactions for Customer")
@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_JSON)
@Path("/customerAccountTransactions/{customerCode: [a-zA-Z0-9]+}")
@RequestMapping(value ="/transaction/{customerCode: [a-zA-Z0-9]+}", method=RequestMethod.POST, produces=MediaType.APPLICATION_JSON, consumes=MediaType.APPLICATION_JSON)
@ApiImplicitParams(@ApiImplicitParam(name = AUTHORIZATION, value = AUTHORIZATION, required = true, dataType = STRING, paramType = HEADER))
public Response getAccountTransactionsForCustomer(@PathVariable(CUSTOMER_CODE) @PathParam(CUSTOMER_CODE) final String customerCode, TransactionParameters transactionParameters) throws IntegrationException {
LOGGER.info("getAccountTransactionsForCustomer()");
Response response = null;

try {
final AccountTransactionsBean atb = getTransactions(customerCode, transactionParameters)
response = ResponseBuilder.buildSuccessResponse(atb);
} catch (final NotAuthorizedException nae) {
response = ResponseBuilder.buildNotAuthorizedResponse();
}
return response;
}

但这是我的问题 - 当我在客户端调用端点的位置放置断点时,日期是正确的。

enter image description here

但是,日期在进入服务器端点时非常不正确

enter image description here

TransactionParameters bean 中的所有其他变量都是正确的。我还使用 SOAP UI 复制了此调用,以排除客户端的任何问题,但问题仍然存在。

有人可以提供任何建议吗?

在此先感谢您的帮助。

最佳答案

出现这个问题的原因是日期和字符串是两种不同的数据类型。当您将对象转换为 JSON 时,它直接将日期转换为字符串,并且在该过程中失去了它的本质。

为了解决这个问题,您需要告诉代码这些特定字段是日期,因此需要按原样保留。您可以通过在 POJO 中使用注释来做到这一点:

示例:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss.SSSZ")
private Date changeTimestamp;

您可以使用上述语法,然后根据需要更改模式。

关于java - Java 时间戳的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com