2011-10-11 20 views
1

我想使用域對象作爲@RequestBody。我的域對象是不可變的對象,所以它們沒有任何setter方法。它的應用程序/ json請求,我正在使用傑克遜消息轉換器。Spring 3 MVC - 使用域對象作爲@RequestBody

@RequestMapping(value="/user", method=RequestMethod.POST) 
@ResponseStatus(HttpStatus.NO_CONTENT) 
public @ResponseBody void createUser(@RequestBody User user) { 
    .......... 
} 

因爲我沒有我的用戶對象的內部setter方法,當我做一個POST請求到「/用戶」,我從MappingJacksonHttpMessageConverter得到UnrecognizedPropertyException。春天有沒有辦法可以使用用戶對象的靜態工廠方法(或構造函數)而不是setter來分配數據。

回答

0

我認爲這取決於您的JSON解析器。我知道GSON [1]在領域(而不是獲得者/定位者)上工作,所以你可能會有更好的運氣。我相信你必須編寫自己的消息轉換器。

[1] http://code.google.com/p/google-gson/

+0

另外:作爲版本1.2,傑克遜允許使用的「創建者」的方法(構造器和靜態工廠方法),這意味着它可以省略設置器方法,如果數據是通過構造要傳遞(HTTP: //wiki.fasterxml.com/JacksonFAQ#Data_Binding.2C_general)。我想知道MappingJacksonHttpMessageConverter如何實現它。 – Chandra

2

,我發現自己的答案。使用@JsonCreator。這是一個例子。你也可以在靜態工廠方法中使用它。

@JsonCreator 
public NonDefaultBean(@JsonProperty("name") String name, @JsonProperty("age") int age) 
{ 
    this.name = name; 
    this.age = age; 
} 
+0

很好的答案,正是我所期待的。 –

相關問題