Как принять параметры даты в запросе GET для Spring MVC Controller?

У меня есть запрос GET, который отправляет дату в формате YYYY-MM-DD в контроллер Spring. Код контроллера выглядит следующим образом:

@RequestMapping(value="/fetch" , method=RequestMethod.GET)
    public @ResponseBody String fetchResult(@RequestParam("from") Date fromDate) {
        //Content goes here
    }

Запрос отправляется правильно, поскольку я проверяю Firebug. Я получаю сообщение об ошибке:

HTTP Status 400: запрос, отправленный клиентом, был синтаксически неправильным.

Как я могу заставить контроллер принять этот формат Date? Пожалуйста помоги. Что я делаю неправильно?

Ответ 1

Хорошо, я решил. Написание его для всех, кто может устать после полного дня безостановочного кодирования и пропустить такую ​​глупую вещь.

@RequestMapping(value="/fetch" , method=RequestMethod.GET)
    public @ResponseBody String fetchResult(@RequestParam("from") @DateTimeFormat(pattern="yyyy-MM-dd") Date fromDate) {
        //Content goes here
    }

Да, это просто. Просто добавьте аннотацию DateTimeFormat.

Ответ 2

Это то, что я сделал, чтобы получить отформатированную дату с переднего конца.

  @RequestMapping(value = "/{dateString}", method = RequestMethod.GET)
  @ResponseBody
  public HttpStatus getSomething(@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String dateString) {
   return OK;
  }

Вы можете использовать его, чтобы получить то, что хотите.

Ответ 3

... или вы можете сделать это правильно и иметь последовательное правило для сериализации/десериализации дат во всем приложении. поместите это в application.properties:

spring.mvc.date-format=yyyy-MM-dd

Ответ 4

Если вы хотите использовать PathVariable, вы можете использовать пример метода ниже (все методы и делают то же самое):

//You can consume the path .../users/added-since1/2019-04-25
@GetMapping("/users/added-since1/{since}")
public String userAddedSince1(@PathVariable("since") @DateTimeFormat(pattern = "yyyy-MM-dd") Date since) {
    return "Date: " + since.toString(); //The output is "Date: Thu Apr 25 00:00:00 COT 2019"
}

//You can consume the path .../users/added-since2/2019-04-25
@RequestMapping("/users/added-since2/{since}")
public String userAddedSince2(@PathVariable("since") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date since) {
    return "Date: " + since.toString(); //The output is "Date: Wed Apr 24 19:00:00 COT 2019"
}

//You can consume the path .../users/added-since3/2019-04-25
@RequestMapping("/users/added-since3/{since}")
public String userAddedSince3(@PathVariable("since") @DateTimeFormat(pattern = "yyyy-MM-dd") Date since) {
    return "Date: " + since.toString(); //The output is "Date: Thu Apr 25 00:00:00 COT 2019"
}