1

我有一个 Spring MVC 3/J2EE 项目。jsp 呈现控制器工作正常,但为 Ajax 呈现 XML 的一个控制器无法正常工作。我在 RAD 7.5 中使用 JDK 1.6,所以 JAXB 应该在类路径上,我什至尝试将最新的 JAXB jar 添加到 lib 文件中以确保。 当我拨打电话时,我仍然收到 406 错误。 我的 DOJO 电话有handleAs: "xml",我已经通过 FireBug 确认它application/xmlAccept标题上。我的 spring servlet xml 文件中有这一<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

很难说没有看到你是如何配置你的视图/视图解析器的。但是,我怀疑包含 a 的客户端 URL .htm,特别是如果您使用的是ContentNegotiatingViewResolver. 我建议删除文件扩展名。浏览器会自动使用AcceptHTML 标头,因此无需使用扩展名。

于 2011-10-24T20:50:39.073 回答