@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, поэтому нет необходимости использовать расширение.