2017-03-16 11 views
1

春のWebアプリケーション設定を使用してPOJOにDeserialiseクエリパラメータは、ジャクソンObjectMapperこの春MVC:ジャクソンobjectMapper

objectMapper.disable(ADJUST_DATES_TO_CONTEXT_TIME_ZONE) 
    objectMapper.registerModule(new JavaTimeModule()) 

JavaTimeModuleのように構成された含まれていZonedDateTimeのデシリアライゼーションを処理するために追加されます。 ZonedDateTimeを含むPOJOを処理する2つのエンドポイントがあります。 POJOは、このようなものです:エンドポイントと

class MyRequest { 
    ZonedDateTime from 
    ZonedDateTime to 
} 

とコントローラがある:

私は身体

{"from": "2017-03-15T00:00:00Z", "to": "2017-03-16T00:00:00Z"} 

応答が200で、デシリアライゼーションが成功するとPOST/POJOを送信

@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") 
    } 
} 

。私は

が400不正な要求がGET要求であるため、エラー

Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime] for value '2017-03-15T00:00:00Z' 

このメイク感覚で受信された

GET /pojo?from=2017-03-15T00:00:00Z&to=2017-03-15T00:00:00Z 

、私はJSONので、JSONオブジェクトを送信していないよ送る

反して、マッパーは呼び出されません。

GETリクエストにもobjectMapperを使用する方法があるため、クエリパラメータはPOJOオブジェクトに変換されますか?

ちなみに、私はそれは以下のようにGETエンドポイントのために直列化復元することができることを知っているが、私はobjectMapperを注入し、クエリパラメータは、オブジェクト解きにマップ変換GETとPOSTエンドポイント

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

答えて

1

に同じコンバータを使用したいです問題は

@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") 
    } 
...