以下代码起作用
public @ResponseBody
Map<String, Object> test(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) ZonedDateTime startDate,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) ZonedDateTime endDate) {
return null;
}
带着这个请求
https://localhost:8080/api/v1/test?startDate=2000-10-31T01:30:00.000-00:00&endDate=2000-10-31T01:30:00.000-00:00
但是,下面的代码会引发异常
public @ResponseBody
Map<String, Object> test(@RequestBody @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) ZonedDateTime startDate,
@RequestBody @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) ZonedDateTime endDate) {
return null;
}
用这个身体
{
"endDate":"2000-10-31T01:30:00.000-00:00",
"startDate":"2000-10-31T01:30:00.000-00:00"
}
有这个例外吗?
[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected token (START_OBJECT), expected one of [VALUE_STRING, VALUE_NUMBER_INT, VALUE_NUMBER_FLOAT] for java.time.ZonedDateTime value; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected one of [VALUE_STRING, VALUE_NUMBER_INT, VALUE_NUMBER_FLOAT] for java.time.ZonedDateTime value
发布于 2022-05-26 06:06:11
您必须使用@ModelAttribute
或make object或map来映射主体,因为反射实用程序没有机会读取函数参数名称(不能为映射指定属性名称)。
public class User {
private String name;
private String occupation;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@RestController
public class MyController {
@ResponseStatus(value = HttpStatus.OK)
@PostMapping(value="/myfoo")
public void process2(@ModelAttribute("email") String email) {
}
@ResponseStatus(value = HttpStatus.OK)
@PostMapping(value="/vals")
public void process(@RequestBody MultiValueMap<String, String> values) {
}
@ResponseStatus(value = HttpStatus.OK)
@PostMapping(value="/user", consumes = MediaType.APPLICATION_JSON_VALUE)
public void process2(@RequestBody User user) {
}
}
注意
始终为@RequestParam
设置属性名称,否则如果有人不仅添加此参数或更改函数签名,您可能会出错。
https://stackoverflow.com/questions/72385456
复制相似问题