1

Spring MVC 3/J2EEプロジェクトがあります。jspレンダリングコントローラーは正常に機能していますが、Ajax用のXMLをレンダリングする1つのコントローラーが機能していません。RAD7.5でJDK1.6を使用しているので、JAXBをクラスパスに含める必要があります。また、最新のJAXBjarをlibファイルに追加して確認しました。 電話をかけると、まだ406エラーが発生します。 私のDOJO呼び出しにはがあり、 FireBugを介してヘッダーにhandleAs: "xml"あることを確認しました。Springサーブレットのxmlファイルにその行があります。メソッドが呼び出され、エラーなしで返されることがわかります。次にデバッグするために何を試すべきかわかりません。application/xmlAccept<mvc:annotation-driven />

//Country is a class with only primative types which implements Serializable.
public @ResponseBody List<Country> getCountries(){
    return addressService.getCountries();
}

function loadData(){
    console.log("Before get ...");
    dojo.xhrGet({
        url:"http://localhost:9080/sample/shared/getCountries.htm",
        handleAs:"xml",
        load: function(data){
            console.log("In load function ...");
            try {
                for(var i in data){
                   console.log("key", i, "value", data[i]);
                }
            }catch (ex){
                console.error("Failure in load function: " + ex);
            }
            console.log("Exiting load function ...");
        },
        error: function(x){
            console.error("Error in ajax ...");
            console.error(x);
        },
        failOk: false
    });
    console.log("After get ...");
}
4

2 に答える 2

4

次のラッパークラスを作成してみてください。

@XmlRootElement
class Countries {
    private List<Country> countries = new ArrayList<Country>()

    //getters/setters
}

そして、生のリストの代わりにコントローラーからそれを返します:

public @ResponseBody Countries getCountries()

ほとんどの場合、問題の原因は、JavaリストをマーシャリングできないJAXBが原因です(XMLドキュメントのルートタグに名前を付ける方法がわかりません)。JSONでデータをリクエストする場合(JacksonがCLASSPATHで利用可能な場合)、問題はおそらく発生しないことに注意してください。

(同様の問題)も参照してください:

于 2011-10-24T21:15:25.343 に答える
1

ビュー/ビューリゾルバーをどのように構成したかを見ずに言うのは難しい. ただし、.htm特にContentNegotiatingViewResolver. ファイル拡張子を削除することをお勧めします。ブラウザーAcceptは HTML のヘッダーを自動的に使用するため、拡張機能を使用する必要はありません。

于 2011-10-24T20:50:39.073 に答える