2

クライアントコード:

$.ajax({
        type: "POST",
        url: "../web/zittles",
        data: jsonformatdata,
        contentType: "application/json",
        dataType: "json",
    success: function(data)
        {
        alert("data from server : "+data);
        },
        error: function(jqXHR, textStatus, errorThrown)
        {
            alert("jqXHR.status = "+jqXHR.status); //getting status code 400 here
        }        
});

jsonデータを出力します:

{
        "id": 1,
        "No": "1234",
        "Desc": "Testing"
}

Javaクラス:

public class Fizzle implements Serializable
{
    private String id;
    private String No;
    private String Desc;
    // getters and setters 
}

Spring 3コントローラー:

@RequestMapping(value = '/zittles', method = RequestMethod.POST, headers ="Content-Type=application/json")
    public @ResponseBody void doSomeThing (@RequestBody Fizzle fizzle) {

        //do something here
}

app-servlet.xmlには

<mvc:annotation-driven/>

tomcatの/libフォルダには

jackson-core-lgpl-1.9.10.jar
jackson-mapper-lgpl-1.9.10.jar

ステータスコード400でエラーが発生する-

"The request sent by the client was syntactically incorrect"

以下のようにコントローラーコードを変更すると、jsonデータが文字列として取得されます。

public @ResponseBody void doSomeThing (@RequestBody String fizzle) {}

理想的には、JacksonはjsonデータをFizzleオブジェクトに自動的にマッピングする必要があります。

私がここで行方不明になっているのは何ですか。ジャクソンパーサーを正しく構成するために他に何かしなければならないことはありますか?

助けてください。

4

2 に答える 2

2

ID は文字列ではなく、long または int でなければなりません

 private int id;

編集

多分このJSONを試してください:

{
        "id": 1,
        "no": "1234",
        "desc": "Testing"
}

Fizzleクラスでプロパティを小文字に変更します

Edit2 これが Jakson の問題か Spring の問題かをテストします。JSON をファイルに保存し、オブジェクトに変換してみます。

ObjectMapper mapper = new ObjectMapper();
Fizzle fizzle = mapper.readValue(new File("c:\\fizzle.json"), Fizzle .class);
于 2012-09-26T13:47:26.530 に答える
0

それは私のために働いたので、私は自分の質問に答えています。方向性を教えてくれた「vacuum」に感謝します。JSONデータの配列を受け取っているので、Listを使用しています。

@JsonTypeName
@RequestMapping(value = '/zittles', method = RequestMethod.POST, headers ="Content-Type=application/json")     
public @ResponseBody void doSomeThing (@RequestBody String fizzles) 
{          
     //do something here
     ObjectMapper mapper = new ObjectMapper();
     ArrayList list = mapper.readValue(new StringReader(fizzles), ArrayList.class);
     List<Fizzle> fizzles1 = mapper.convertValue(list, new TypeReference<List<Fizzle>>() {});
}
于 2012-10-01T12:18:51.620 に答える