0

いくつかの基本を完全に理解していないため、おそらく何かを見落としています。私のコントローラーには、次のようなものがあります

functiona(Person person){
System.out.println(p.firstName);
}

ビューには次のものがあります

$.post("/validatePerson",{person: [{name:"first",value:"last"}]},function(result){
alert('done');
}

情報は渡されているように見えますが、メンバーは設定されていません。次のタイプバインダーも追加しようとしました

@Global
public class PersonJsonObjectBinder implements TypeBinder<Person> {     
    @Override     
    public Person bind(String name, 
                        Annotation[] annotations, 
                        String value, Class actualClass, 
                        Type genericType) throws Exception 
                        {                               
                        return new Gson().fromJson(value, Person.class);
                        }
                    //return new JsonParser().parse(value) ;}
}

あなたの助けは非常に高く評価されています。

4

1 に答える 1

0

コントローラの引数に直接バインドする場合は、リクエストURIの一部としてPersonデータを渡す必要があります。

$.post("/validatePerson?person.firstname=john&person.lastname=doe",function(result){
alert('done');

}

パラメータperson.firstnameが引数名personおよびプロパティとどのように一致するかを確認してください。

Jsonからバインドするには、本体をjson要素として取得し、GSONビルダーを使用して逆シリアル化することができます。次のようなもの

JsonElement jsonElement = new JsonParser().parse(body);
Person person = new GsonBuilder().create().fromJson(jsonElement,Person.class)

ここでも、jsonプロパティはPersonクラスのプロパティと一致する必要があります。

{person: [{firstname:"john",lastname:"doe"}]}
于 2012-10-09T15:25:39.067 に答える