2016-05-26 12 views
1

配送先住所と請求先住所が必要なチェックアウトページを作成しています。これは、サードパーティ製のライブラリと統合されています。サードパーティのライブラリは、両方とも同じタイプ(アドレス)として実装されています。Spring Framework - 同じタイプの複数のModelAttributes

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public Response createOrder(
    @ModelAttribute("customer") Customer customer, 
    @ModelAttribute("shipping") Address shippingAddress, 
    @ModelAttribute("payment") Payment paymentInformation, 
    @ModelAttribute("billing") Address billingAddress 
) { 
    // Create the order 
} 

私はこの作品を作るように、私のSpringアプリケーションに上とまったく同じタイプの2つの別々のモデルを送信する方法で立ち往生しています:私は何をできるようにする必要があることのようなものです。私は潜在的にファサードモデルを作ってコントローラー内の実際のものにマップすることができますが、私がそれを避けることができれば、そのルートを下回らない方がいいでしょう。

編集:モデルの属性名を変更して、問題の領域をより明確にするように変更しました。

+0

ようになります。同じModelAttribute名を使用する必要がある理由はありますか? shippingAddressとbillingAddressにモデル属性の名前を付けることができないのはなぜですか?メソッドのパラメータの型は重要ではありません。 – jjhavokk

+0

データを送信する方法が問題になります。彼らはまったく同じフィールド名を持っているので、 'city = Atlanta&state = Georgia'などは動作しません。それは理にかなっていますか? – dawsonc623

答えて

1

各タイプに別々のモデル属性を作成する代わりに、Orderオブジェクトとモデル属性 'order'を作成します。

//Order class 
private Customer customer; 
private Address shippingAddress; 
private Payment paymentInformation; 
private Address billingAddress 

.. 

public Response createOrder(
    @ModelAttribute("order") Order order) { 
    // Create the order 
} 

その後の要求は、私は問題を理解していない

shippingAddress.city=foo&billingAddress.city=bar 
関連する問題