我有一个GET请求,它将YYYY-MM-DD格式的日期发送给Spring Controller。 控制器代码如下:
@RequestMapping(value="/fetch" , method=RequestMethod.GET)
public @ResponseBody String fetchResult(@RequestParam("from") Date fromDate) {
//Content goes here
}
在我使用Firebug进行检查时,请求已正确发送。 我收到错误:
HTTP状态400:客户端发送的请求在语法上不正确。
如何让控制器接受这种日期格式? 请帮忙。我做错了什么?
答案 0 :(得分:220)
好的,我解决了。 写给那些在一整天的不间断编码后可能会感到疲倦的人。想念这么傻的东西。
@RequestMapping(value="/fetch" , method=RequestMethod.GET)
public @ResponseBody String fetchResult(@RequestParam("from") @DateTimeFormat(pattern="yyyy-MM-dd") Date fromDate) {
//Content goes here
}
是的,很简单。只需添加DateTimeFormat注释。
答案 1 :(得分:4)
这就是我从前端获取格式化日期所做的工作
@RequestMapping(value = "/{dateString}", method = RequestMethod.GET)
@ResponseBody
public HttpStatus getSomething(@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String dateString) {
return OK;
}
你可以用它来得到你想要的东西。
答案 2 :(得分:4)
...否则您可以正确地进行操作,并且对整个应用程序中的日期进行序列化/反序列化有一个统一的规则。将其放在application.properties中:
spring.mvc.date-format=yyyy-MM-dd
答案 3 :(得分:1)
您可以使用:
public @ResponseBody String fetchResult(@RequestParam("from")@DateTimeFormat(pattern="yyyy-MM-dd") 日期 fromDate) { //你的代码...
var text = document.getElementById('text-div')
var counter = document.getElementById('counter')
$('#text-div').on('input', () => {
counter.innerText = text.innerText.length - 1
})
答案 4 :(得分:0)
如果要使用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"
}
答案 5 :(得分:0)
以下解决方案非常适合Spring Boot应用程序。
控制器:
@GetMapping("user/getAllInactiveUsers")
List<User> getAllInactiveUsers(@RequestParam("date") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date dateTime) {
return userRepository.getAllInactiveUsers(dateTime);
}
因此,在调用方(在我的情况下是网络流量)中,我们需要以这种(“ yyyy-MM-dd HH:mm:ss” )格式传递日期时间。
>呼叫方:
public Flux<UserDto> getAllInactiveUsers(String dateTime) {
Flux<UserDto> userDto = RegistryDBService.getDbWebClient(dbServiceUrl).get()
.uri("/user/getAllInactiveUsers?date={dateTime}", dateTime).retrieve()
.bodyToFlux(User.class).map(UserDto::of);
return userDto;
}
存储库:
@Query("SELECT u from User u where u.validLoginDate < ?1 AND u.invalidLoginDate < ?1 and u.status!='LOCKED'")
List<User> getAllInactiveUsers(Date dateTime);
干杯!