2015-06-11 2 views
2

Я использую Spring RestTemplate с Джексоном.Spring REST получить объект с полем даты

Я пытаюсь отправить список параметров, завернутых внутри объекта, контроллеру с запросом GET, но я продолжаю получать ошибку 400, если присутствует поле Date.

Это объект, который я пытаюсь отправить:

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 без успеха.

ответ

1

будет более чистым способом, вместо того, чтобы использовать даты, чтобы использовать временные метки. В просто словах это представление даты с числами. см. Ссылку: http://www.unixtimestamp.com/ и вместо отправки даты отправит на сервер одно длинное число.

+0

Так оно и сработало, спасибо! Тем не менее я надеялся, что это сработало бы для запроса GET так же, как и запрос POST. –

0

Я считаю, что если конвертер не указан, Spring закончит вызов устаревшего конструктора Date, который принимает String в качестве аргумента для преобразования входной строки в объект Date.

Попробуйте проходя дату в этом формате '11/12/2012 16:50 PM»

+0

Я добавил '@JsonFormat (shape = Shape.STRING, pattern =" yyyy/MM/dd HH: mm ")' для получателя Date и называется '/ vpspay/get-payinfo/myid? CodeCli = A465 & soapPassword = myPass & expiryDate = 2999/12/31% 252000: 00 & soapServer = https: //111.111.11.11: 7654 & status = true', но результат тот же –

Смежные вопросы