Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring MVC:使用Jackson objectMapper将查询参数反序列化到POJO_Spring Mvc_Spring Boot_Deserialization_Jackson2 - Fatal编程技术网

Spring mvc Spring MVC:使用Jackson objectMapper将查询参数反序列化到POJO

Spring mvc Spring MVC:使用Jackson objectMapper将查询参数反序列化到POJO,spring-mvc,spring-boot,deserialization,jackson2,Spring Mvc,Spring Boot,Deserialization,Jackson2,SpringWeb应用程序配置包含如下配置的JacksonObjectMapper objectMapper.disable(ADJUST_DATES_TO_CONTEXT_TIME_ZONE) objectMapper.registerModule(new JavaTimeModule()) 添加了JavaTimeModule以处理ZoneDateTime的反序列化。有两个端点处理包含zoneDateTime的POJO。POJO是这样的: class MyRequest { Zo

SpringWeb应用程序配置包含如下配置的Jackson
ObjectMapper

  objectMapper.disable(ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
  objectMapper.registerModule(new JavaTimeModule())
添加了
JavaTimeModule
以处理
ZoneDateTime
的反序列化。有两个端点处理包含
zoneDateTime
的POJO。POJO是这样的:

class MyRequest {
  ZonedDateTime from
  ZonedDateTime to
}
具有端点的控制器是:

@Slf4j
@RestController
class MyController {

  @GetMapping('/pojo')
  void getPojo(MyRequest myRequest) {
    log.debug("Request received: $myRequest")
  }

  @PostMapping('/pojo')
  void postPojo(@RequestBody MyRequest myRequest) {
    log.debug("Request received: $myRequest")
  }
}
当我发送带有正文的POST/pojo时

{"from": "2017-03-15T00:00:00Z", "to": "2017-03-16T00:00:00Z"}
响应为200,反序列化成功

相反,当我发送

GET /pojo?from=2017-03-15T00:00:00Z&to=2017-03-15T00:00:00Z
收到错误的400错误请求

Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime] for value '2017-03-15T00:00:00Z'
这是有意义的,因为在GET请求中,我不发送JSON,因此不调用JSON对象映射器

有没有一种方法可以将
objectMapper
也用于GET请求,从而将查询参数转换为POJO对象

顺便说一句,我知道它可以像下面这样对GET端点进行反序列化,但我想对GET端点和POST端点使用相同的转换器

@DateTimeFormat(iso = ISO.DATE_TIME)
ZonedDateTime from
@DateTimeFormat(iso = ISO.DATE_TIME)
ZonedDateTime to

注入
objectMapper
并将查询参数映射转换为对象解决了这个问题

@Slf4j
@RestController
class MyController {

  @Autowired
  private ObjectMapper objectMapper

  @GetMapping('/pojo')
  void getPojo(@RequestParam Map<String, String> allRequestParams) {
    MyRequest request = objectMapper.convertValue(allRequestParams, MyRequest)
    log.debug("Request received: $myRequest")
  }
...
@Slf4j
@RestController
类MyController{
@自动连线
私有对象映射器对象映射器
@GetMapping(“/pojo”)
void getPojo(@RequestParam-Map-allRequestParams){
MyRequest request=objectMapper.convertValue(allRequestParams,MyRequest)
调试(“收到的请求:$myRequest”)
}
...

注入
对象映射器
并将查询参数映射转换为对象解决了这个问题

@Slf4j
@RestController
class MyController {

  @Autowired
  private ObjectMapper objectMapper

  @GetMapping('/pojo')
  void getPojo(@RequestParam Map<String, String> allRequestParams) {
    MyRequest request = objectMapper.convertValue(allRequestParams, MyRequest)
    log.debug("Request received: $myRequest")
  }
...
@Slf4j
@RestController
类MyController{
@自动连线
私有对象映射器对象映射器
@GetMapping(“/pojo”)
void getPojo(@RequestParam-Map-allRequestParams){
MyRequest request=objectMapper.convertValue(allRequestParams,MyRequest)
调试(“收到的请求:$myRequest”)
}
...