Java时间戳的Bizzare问题

我正在处理将对象发送到服务器进行处理的应用程序.使用SpringJSON格式发送对象.

我的问题是所有字段都正确传递-除Date变量外.它们表现为完全不同的价值,我为之困惑.

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

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复制了此调用,以排除客户端的任何问题,并且该问题仍然存在.

谁能提供任何建议?

在此先感谢您的帮助.

最佳答案
此问题的原因是Date和String是两种不同的数据类型.当您将Object转换为JSON时,它将直接将日期转换为String,并且在此过程中失去了本质.

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

例:

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

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

转载注明原文:Java时间戳的Bizzare问题 - 代码日志