Ошибка веб-скрипта 500 шаблон игнорируется

Я написал веб-скрипт Alfresco, который отображает CSV, он работает хорошо.

В конкретном случае я хочу, чтобы веб-скрипт возвращал ошибку 500 как JSON, поэтому я написал для него шаблон .json.500.ftl .

ПРОБЛЕМА. Ошибка 500 всегда отображается как HTML (шаблон ошибки веб-скрипта по умолчанию).
Что я сделал не так?

Мои файлы:

auditlog.get.desc.xml
auditlog.get.csv.ftl
auditlog.get.json.500.ftl

auditlog.get.json.500.ftl содержит только {"error": "abc is not correct"}

auditlog.get.desc.xml содержит:

<webscript>
    <shortname>Audit Log Web Script</shortname>
    <description>Returns audit data for a given day</description>
    <url>/theapp/auditlog</url>
    <authentication>admin</authentication>
    <format default="csv"></format>
</webscript>

Все эти файлы находятся в tomcat/webapps/alfresco/WEB-INF/classes/alfresco/extension/templates/webscripts/, и я перезапустил Alfresco.


person Nicolas Raoul    schedule 08.03.2017    source источник
comment
Попробуйте позвонить так: localhost: 8080 / alfresco / service / ‹ur дополнительные имена, любые ›Theapp / auditlog? Format = json Последним я добавил format = json. Но это может повлиять на исходный параметр формата запроса.   -  person Muralidharan Deenathayalan    schedule 08.03.2017
comment
@MuralidharanDeenathayalan: это правильно возвращает JSON. Я надеялся получить CSV, если все пойдет хорошо, но получить JSON только в случае ошибки 500 ... может быть, технология Web Script не предназначена для этого?   -  person Nicolas Raoul    schedule 08.03.2017
comment
Если вы используете веб-скрипт с поддержкой Java, IIRC, вы можете переопределить формат возврата веб-скрипта на JSON. Обратитесь к методам org.springframework.extensions.webscripts.DeclarativeWebScript и org.springframework.extensions.webscripts.DeclarativeWebScript.renderFormatTemplate(String, Map<String, Object>, Writer).   -  person Muralidharan Deenathayalan    schedule 08.03.2017
comment
@MuralidharanDeenathayalan: DeclarativeWebScri‌​pt.renderFormatTempl‌​ate is final, так что, думаю, мне нужно продлить AbstractWebScript? (в настоящее время мой код Java расширяет DeclarativeWebScript)   -  person Nicolas Raoul    schedule 08.03.2017


Ответы (1)


<format default="csv"></format>

Вышеупомянутая строка будет пытаться получить шаблон с именем "auditlog.get.csv.500.ftl", которого нет в вашем случае.

Он будет пытаться получить другой шаблон ответа только в том случае, если вы передаете другой параметр в URL-адресе, как показано ниже.

"http://localhost:8080/share/service/demo/webscript?format=json "

person Krutik Jayswal    schedule 08.03.2017
comment
Итак, ваш вывод заключается в том, что мое требование (тот же запрос возвращает CSV в порядке, JSON - KO) не может быть реализовано без настройки системы веб-скриптов, верно? - person Nicolas Raoul; 09.03.2017
comment
не понял тебя. - person Krutik Jayswal; 09.03.2017
comment
Во-первых, вы ничего не упомянули в шаблоне out html, во-вторых, если сервер вернет ошибку 500, он отобразит 500.ftl, как вы это определили. Я думаю, вам следует прочитать о том, как работает тег ‹format default = csv› ‹/format› в дескрипторе. - person Krutik Jayswal; 09.03.2017
comment
Действительно, писать <format default="csv"></format> было моей ошибкой. Спасибо! - person Nicolas Raoul; 09.03.2017
comment
Тот же веб-скрипт должен возвращать CSV, если все идет хорошо, и JSON, если что-то пойдет не так. Я не могу просить людей использовать другой URL-адрес, потому что при запуске запроса они еще не знают, пойдет ли что-то правильно или неправильно. - person Nicolas Raoul; 09.03.2017