2017-06-15 14 views
1

どうすれば複数の豆を私の@RestControllerにマップできますか?Spring @RestControllerで複数のBeanをマッピングする方法は?

Iは、ばねウェブ4.3.8.RELEASE.jarを使用してい

私が試したすべてのもの:@RequestParam @RequestBody、@RequestAttribute、@RequestPartが、何もうまくいかない...

package com.example.demo; 

import org.springframework.http.MediaType; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class RestService { 

    @RequestMapping(value = "demo", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
    public Object[] demo(Foo foo, Bar bar) { 
     return new Object[]{foo, bar}; 
    } 

    public static class Bar { 
     public Long id; 
     public String bar; 
    } 

    public static class Foo { 
     public Long id; 
     public String foo; 
    } 
} 

マイ(符号化)ペイロードがある:

foo=%7B%22id%22%3A123%2C%22foo%22%3A%22foo1%22%7D&bar=%7B%22id%22%3A456%2C%22bar%22%3A%22bar1%22%7D

デコードペイロード:

foo={"id":123,"foo":"foo1"}&bar={"id":456,"bar":"bar1"}

リクエストヘッダ:

Content-Type: application/x-www-form-urlencoded

上記のコードでは、それが返されます。

[{"id":null,"foo":null},{"id":null,"bar":null}]

しかし、私が欲しいのです:

[{"id":123,"foo":"foo1"},{"id":456,"bar":"bar1"}]

おかげ

+0

可能な複製:https://stackoverflow.com/questions/20622359/automatic-conversion-of-json-form-parameter-in-spring-mvc-4-0 – chuckskull

+0

@Freddy Boucher私の編集を確認してください。 –

答えて

0

あなたがいます静的内部クラスを作成するあなたのRestControllerのss。 Springは、受け取ったリクエストから上記のBeanでプロパティを自動的にマップすることはできません。 Beanを別のパッケージまたはコントローラの外に定義してください。それからあなたは@RequestBodyでそれをマップすることができます。 refereceため

  @RestController 
      public class RestService { 

       @RequestMapping(value = "demo", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
       public Object[] demo(@RequestBody FooBar foobar) { 
         // your custom work 
       } 
      } 


       public class Bar { 
        public Long id; 
        public String bar; 
       } 

       public class Foo { 
        public Long id; 
        public String foo; 
       } 

// created wrapper as @RequestBody can be used only with one argument. 
       public class FooBar { 
         private Foo foo; 
         private Bar bar; 
       } 

リクエストパラメータ名はあなたのBeanのプロパティと一致していることを確認してください。(すなわちfooとbar)もrequestBody with multiple beans

を確認してください。

+0

こんにちは@Sangam Belose。 内部クラスとして定義されたBeansは問題ではありませんが、とにかく私はあなたのソリューションをテストしましたが、うまくいきません。 {"タイムスタンプ":1497515020279、 "ステータス":415、 "エラー": "サポートされていないメディアタイプ"、 "例外": "org.springframework.web.HttpMediaTypeNotSupportedException"、 "message" "/ demo"} –

+0

@FreddyBoucher私の編集をご覧ください。 –

+0

ああ、それはスマートです!しかし、まだ動作しません:{"タイムスタンプ":1497569272670、 "ステータス":415、 "エラー": "サポートされていないメディアタイプ"、 "例外": "org.springframework.web.HttpMediaTypeNotSupportedException"、 "メッセージ": "コンテンツ'application/x-www-form-urlencoded; charset = UTF-8'はサポートされていません "、" path ":"/demo "} –

関連する問題