Spring REST 获取带有日期字段的对象
Spring REST get object with Date field
我在 Jackson 中使用 Spring RestTemplate。
我正在尝试使用 GET 请求将包含在对象内的参数列表发送到控制器,但只要日期字段存在,我就会继续收到 400 错误。
这是我要发送的对象:
public class UserPmVpxpServiceDTO implements GenericDTO {
private static final long serialVersionUID = 1L;
private String codeCli;
private String soapPassword;
private Date expiryDate;
private String soapServer;
private Boolean status;
public UserPmVpxpServiceDTO() {
}
@JsonCreator
public UserPmVpxpServiceDTO(@JsonProperty("codeCli") final String codeCli,
@JsonProperty("soapPassword") final String soapPassword,
@JsonProperty("expiryDate") final Date expiryDate,
@JsonProperty("soapServer") final String soapServer,
@JsonProperty("status") final Boolean status) {
this.codeCli = codeCli;
this.soapPassword = soapPassword;
this.expiryDate = expiryDate;
this.soapServer = soapServer;
this.status = status;
}
// getters and setters
}
这是我要发送的请求
final UriComponentsBuilder path = UriComponentsBuilder.fromUriString(PMPCG_URL).path(UrlMap.PCG_GET_PAY_INFO);
path.queryParam("codeCli", userPmVpxpServiceDTO.getCodeCli());
path.queryParam("soapPassword", userPmVpxpServiceDTO.getSoapPassword());
path.queryParam("expiryDate", userPmVpxpServiceDTO.getExpiryDate());
path.queryParam("soapServer", userPmVpxpServiceDTO.getSoapServer());
path.queryParam("status", userPmVpxpServiceDTO.getStatus());
final URI uriPcg = path.buildAndExpand(id).toUri();
return restTemplate.getForObject(uriPcg.toString(), PayInfoDTO.class, userPmVpxpServiceDTO);
这是应该接收它的控制器
@RestController
public class VpsPayController {
@RequestMapping(value = UrlMap.PCG_GET_PAY_INFO, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public PayInfoDTO getPayInfo(final UserPmVpxpServiceDTO userPmVpxpServiceDTO, @PathVariable final String id) throws RemoteException, ServiceException {
// my code
}
}
如果我不发送 expiryDate 字段,它将完美运行。
这是一个 url 生成但不起作用的示例
/vpspay/get-payinfo/myid?codeCli=A465&soapPassword=myPass&expiryDate=Tue%2520Dec%252031%252000:00:00%2520CET%25202999&soapServer=https://111.111.11.11:7654&status=true
这反而有效
/vpspay/get-payinfo/myid?codeCli=A465&soapPassword=myPass&soapServer=https://111.111.11.11:7654&status=true
我试图将日期作为 Long
传递,但没有成功。
我相信如果没有指定转换器,Spring 将最终调用已弃用的 Date 构造函数,它将 String 作为参数将输入字符串转换为 Date 对象。
尝试以这种格式传递日期 '11/12/2012 16:50 PM'
使用时间戳比使用日期更简洁。简而言之,它们是用数字表示日期。
查看 link : http://www.unixtimestamp.com/ 而不是发送日期 post 到服务器一个长号。
我在 Jackson 中使用 Spring RestTemplate。
我正在尝试使用 GET 请求将包含在对象内的参数列表发送到控制器,但只要日期字段存在,我就会继续收到 400 错误。
这是我要发送的对象:
public class UserPmVpxpServiceDTO implements GenericDTO {
private static final long serialVersionUID = 1L;
private String codeCli;
private String soapPassword;
private Date expiryDate;
private String soapServer;
private Boolean status;
public UserPmVpxpServiceDTO() {
}
@JsonCreator
public UserPmVpxpServiceDTO(@JsonProperty("codeCli") final String codeCli,
@JsonProperty("soapPassword") final String soapPassword,
@JsonProperty("expiryDate") final Date expiryDate,
@JsonProperty("soapServer") final String soapServer,
@JsonProperty("status") final Boolean status) {
this.codeCli = codeCli;
this.soapPassword = soapPassword;
this.expiryDate = expiryDate;
this.soapServer = soapServer;
this.status = status;
}
// getters and setters
}
这是我要发送的请求
final UriComponentsBuilder path = UriComponentsBuilder.fromUriString(PMPCG_URL).path(UrlMap.PCG_GET_PAY_INFO);
path.queryParam("codeCli", userPmVpxpServiceDTO.getCodeCli());
path.queryParam("soapPassword", userPmVpxpServiceDTO.getSoapPassword());
path.queryParam("expiryDate", userPmVpxpServiceDTO.getExpiryDate());
path.queryParam("soapServer", userPmVpxpServiceDTO.getSoapServer());
path.queryParam("status", userPmVpxpServiceDTO.getStatus());
final URI uriPcg = path.buildAndExpand(id).toUri();
return restTemplate.getForObject(uriPcg.toString(), PayInfoDTO.class, userPmVpxpServiceDTO);
这是应该接收它的控制器
@RestController
public class VpsPayController {
@RequestMapping(value = UrlMap.PCG_GET_PAY_INFO, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public PayInfoDTO getPayInfo(final UserPmVpxpServiceDTO userPmVpxpServiceDTO, @PathVariable final String id) throws RemoteException, ServiceException {
// my code
}
}
如果我不发送 expiryDate 字段,它将完美运行。
这是一个 url 生成但不起作用的示例
/vpspay/get-payinfo/myid?codeCli=A465&soapPassword=myPass&expiryDate=Tue%2520Dec%252031%252000:00:00%2520CET%25202999&soapServer=https://111.111.11.11:7654&status=true
这反而有效
/vpspay/get-payinfo/myid?codeCli=A465&soapPassword=myPass&soapServer=https://111.111.11.11:7654&status=true
我试图将日期作为 Long
传递,但没有成功。
我相信如果没有指定转换器,Spring 将最终调用已弃用的 Date 构造函数,它将 String 作为参数将输入字符串转换为 Date 对象。
尝试以这种格式传递日期 '11/12/2012 16:50 PM'
使用时间戳比使用日期更简洁。简而言之,它们是用数字表示日期。 查看 link : http://www.unixtimestamp.com/ 而不是发送日期 post 到服务器一个长号。