2016-01-05 2 views
4

Я пытаюсь написать rest api, в котором я передаю дату как параметр URL. Дата образования dd/MM/yyyy HH: mm; URL-адрес API REST:Как передать дату (dd/MM/yyyy HH: mm) в качестве параметра в REST API

public static final String GET_TestDate = "/ stay/datecheck? DateCheckIn = {dateCheckIn}";

и метод Отдыхать

 @RequestMapping(value = HotelRestURIConstants.GET_TestDate, method = RequestMethod.GET) 
     public @ResponseBody String getDate(@PathVariable("dateCheckIn") @DateTimeFormat(iso= DateTimeFormat.ISO.DATE) String dateCheckIn) { 
      logger.info("passing date as a param"); 
      String str="date"+dateCheckIn; 
      return str; 
     } 

но когда звоню этот API с помощью клиента REST я получаю сообщение об ошибке 404 . Вот REST URL

http://localhost:8089/stay/datecheck?dateCheckIn="28/01/2016 19:00" 
+0

проблема в том, что вы используете «/» не могу и использовать «-» вместо этого? Вам нужен этот метод для получения? Почтовый метод здесь не работает? – Radu

+0

@Radu Я пробовал с http: // localhost: 8089/stay/datecheck? DateCheckIn = "28-01-2016 19:00", но снова получаю ошибку 404 – nand

+0

@RickS Я делаю это в java и записываю основы для отдыха на основе веб-сервисов – nand

ответ

4

Вместо пространства, используйте% 20. Вместо косой черты вы можете использовать% 2F. Но вы должны декодировать (преобразовать% 20 ​​в пространство и% 2F в слэш) после получения значения. Вместо двоеточия используйте% 3A. У вас есть URL-адрес, на который ссылается таблица: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Последний совет: не используйте кавычки.

Try что-то вроде:

http://localhost:8089/stay/datecheck?dateCheckIn=28%2F01%2F2016%2019%3A00 

Не забудьте расшифровать его.

Что-то вроде: String result = java.net.URLDecoder.decode(url, "UTF-8");

2

Основная проблема здесь: @PathVariable ("dateCheckIn") @DateTimeFormat (изо = DateTimeFormat.ISO.DATE) Строка dateCheckIn

dateCheckIn не должно быть @PathVariable но @RequestParam

Давайте посмотрим разницу:

http://localhost:8089/stay/{path_var}/datecheck?{query_param}=some_value 

Переменная пути является частью пути, она должна быть там, где путь правильно сопоставляется с вашим методом. В действительном вызове вы никогда не указываете имя переменной. Параметр запроса (или параметр запроса) является параметром, который возникает после «?» который появляется после пути. Там вы всегда записываете имя параметра, за которым следует знак «=» и значение. Это может потребоваться или не потребоваться.См следующий пример:

Путь Строка:

String GET_TestDate = "/stay/{path_var}/datecheck"; 

параметров аннотаций:

@PathVariable("path_var") Integer var1, @RequestParam("query_param") String 

Фактический вызов:

http://localhost:8089/stay/1/datecheck?query_param=abc 

Значения заселенных:

var1 = 1 
var2 = "abc" 

Возможно, возникли другие проблемы (например, формат даты, используемый в вашем URL-адресе), вы не должны использовать кавычки и пробелы и должны ли они кодировать URL-адрес или изменять формат, чтобы использовать тире, например, или отправить время и дату в формате Epoch (unix time)), но я считаю, что 404 из-за неправильной строки пути и аннотаций вашего метода.

Еще по теме: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestparam

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates

1

Вы на самом деле есть 2 проблемы.

  • Ваш 404 объясняется тем, что ваш URL-адрес не соответствует ни одному шаблону. Это почти наверняка, потому что вы не MIME кодировали свой параметр даты. Фактический браузер сделает это для вас, но клиенты с кодом/REST, вероятно, не будут, поскольку они разумно не должны возиться с вашим вводом.
  • Ваша следующая проблема заключается в том, что ваша дата - это @QueryParam, а не @PathParam. После того, как вы решить проблему кодирования вы тогда обнаружите, что ваша дата будет нулевой, так как есть не PathParam под этим именем
Смежные вопросы