簡體   English   中英

spring 4 controller @RequestBody參數

[英]spring 4 controller @RequestBody parameter

我有以下情況

public class MyCustomForm {
  private MyCustomType a;
  private MyCustomType b;
}

@RestController
public class AController {
  @RequestMapping(...)
  public void myMethod(@RequestBody MyCustomForm form){
    ...
  }
}

我想在POST請求中發送填寫表單的必要數據。 問題是MyCustomType是一種復雜的數據類型,無法從JSON反序列化。

我嘗試的第一件事是編寫一個PropertyEditor以便Spring知道如何從字符串中進行反序列化。 如果我在@RequestBody旁邊使用其他任何東西(例如它與@PathVariable一起使用),這個解決方案就有效。

我做了一些研究,並且@RequestBody不工作的原因是因為這個注釋生成了一個使用自己的反序列化規則的代理。 這些規則不會干擾自定義PropertyEditor

我嘗試的下一件事是使用自定義Converter 這個解決方案仍然沒有解決問題。

還有其他想法嗎?

據我所知,最新版本的jackson(版本2)將了解自定義ConverterPropertyEditor但更新我的jackson映射器並不是我的解決方案。

你可以使用@JsonDeserialize作為你的MyCustomType

public class MyCustomForm {
  @JsonDeserialize(using = MyCustomTypeDeserializer.class)
  private MyCustomType a;
  @JsonDeserialize(using = MyCustomTypeDeserializer.class)
  private MyCustomType b;
}

一些參考:

https://fasterxml.github.io/jackson-databind/javadoc/2.3.0/com/fasterxml/jackson/databind/annotation/JsonDeserialize.html

http://www.davismol.net/2015/06/05/jackson-using-jsonserialize-or-jsondeserialize-annotation-to-register-a-custom-serializer-or-deserializer/

http://www.baeldung.com/jackson-custom-serialization

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM