@ResponseBody не производит XML в Java 6

У меня есть проект Spring MVC 3/J2EE. Контроллеры рендеринга jsp работают нормально, но один контроллер, который отображает XML для Ajax, не работает. Я использую JDK 1.6 в RAD 7.5, поэтому JAXB должен быть на пути к классам, и я даже попытался добавить последние файлы JAXB в файл lib, чтобы убедиться. Я все еще получаю ошибку 406, когда я звоню. Мой звонок в DOJO handleAs: "xml"и я подтвердил, что application/xml на Accept Заголовок через FireBug. у меня есть <mvc:annotation-driven /> строка в моем весеннем файле сервлета XML. Я вижу, что метод вызывается и возвращается без ошибок. Я не уверен, что я должен попробовать дальше, чтобы отладить.

//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 ...");
}

2 ответа

Решение

Попробуйте создать следующий класс-оболочку:

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

    //getters/setters
}

И вернуть его из контроллера вместо необработанного списка:

public @ResponseBody Countries getCountries()

Скорее всего, ваша проблема вызвана JAXB, который не может упорядочить список Java (он не знает, как назвать корневой тег XML-документа). Обратите внимание, что ваша проблема, вероятно, не возникает при запросе данных в JSON (если Джексон доступен на вашем CLASSPATH).

Смотрите также (похожие проблемы):

Трудно сказать, не видя, как вы настроили свои представления / резольверы. Тем не менее, на стороне клиента URL, содержащий .htm это подозрительно для меня, особенно если вы используете ContentNegotiatingViewResolver, Я рекомендую сбросить расширение файла. Браузеры автоматически используют Accept заголовок для HTML, поэтому нет необходимости использовать расширение.

Другие вопросы по тегам