2014-12-04 32 views
0

如果你有其中有一大堆的參數,如控制器的方法:如何「一攬子」的請求參數parms到一個對象

getSomething (String a, int b, Timestamp c, etc...) 

是什麼,以取代那些與對象的最佳方式,讓你不必再實例化一個新的對象,並設置所有那些從參數上,就像這樣:

SomeObject o = new SomeObject(); 
o.setA(a); 
o.setB(b); 
o.setC(c); 
etc.. 
// use o on other method calls to prepare a response 

我已經試過@ModelAttribute像這樣:

getSomething (@modelAttribute SomeObject o) 

但它似乎不工作,除非你只使用簡單類型的屬性,如字符串和整數。例如,時間戳屬性會導致它失敗並顯示「錯誤的請求」

@RequestBody可以工作,但是對於您的方法調用所需的一些非常重大的更改會導致您無法再簡單地通過瀏覽器調用該方法再也無法測試它,這使得開發更加惱人。

有沒有辦法告訴Spring在常規的http GET請求中接受一堆參數,並使用它們爲您實例化一個對象,並且能夠使用所有屬性數據類型?

+0

SomeObject是一個簡單的POJO,您可以使用(就像你說的)作爲的ModelAttribute請確保您使用@timestamp註解。您可以使用Spring的FORM標籤並將其作爲您的表單的模型。然後將你的表單輸入字段映射到POJO中的實例變量。 – Mechkov 2014-12-04 16:30:15

+0

您可以在POJO中設置的Timestamp實例變量是否正確?它不必在HTML/Spring表單上。 – Mechkov 2014-12-04 16:31:32

回答

0

您可能需要爲Timestamp類編寫一個類型轉換器,並將其註冊到Spring MVC ConversionService。

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

爲什麼你不能使用日期或日期時間(約達時間)班?

如果使用JPA

+0

使用日期將截斷所有時間組件。我從來沒有聽說過DateTime,我的IDE也不認識它。 – Trant 2014-12-04 19:24:55

+0

@Trant它將它們截斷在內存或數據庫中? – 2014-12-04 19:40:13

相關問題