Является ли JAX-RS подходящим в качестве основы MVC?

JAX-RS имеет некоторую поддержку MVC, но мне интересно, действительно ли JAX-RS является хорошим выбором для создания веб-приложения для использования человеком.

Если пользователь вводит неправильную или неполную информацию в форме, она должна отображаться снова, как с помощью Grails или Wicket. Есть ли удобный способ сделать это с помощью JAX-RS?

Насколько я знаю, отображение URI работает некорректно, если не указаны все требуемые параметры или возникают проблемы с преобразованием типов (например, с датой). Это правильно?

Есть ли поддержка для интернационализированных шаблонов?

Вот пример для простого приложения GUI на основе JAX-RS. Но это действительно просто, а вещи, подобные i18n, и валидация не обсуждаются.

Ответы

Ответ 1

Да, вы можете, но вам нужно очистить голову от старой модели публикации страницы и начать думать о своем приложении как отключенном пользовательском интерфейсе, который обменивается данными с SOA RESTful. Когда данные формы введены, они отправляются в конечную точку службы, если данные неверны, тогда вы отвечаете на ошибку с ошибкой, и пользовательский интерфейс обрабатывает эту ошибку. Вы не отправляете бланки на сервер в традиционной модели post-post, а скорее делаете RPC-вызовы в свою заднюю систему. Ваше представление становится полностью отделенным от остальной части стека MVC. Это значительно упрощает замену вида с помощью специальной мобильной или IVR-системы.

Если пользователь вводит неправильную или неполную информацию в форме, она должна отображаться снова, как с помощью Grails или Wicket. Есть ли удобный способ сделать это с помощью JAX-RS?

С помощью богатого интернет-приложения вам не нужно повторно заполнять данные, потому что вы никогда не покидали страницу, на сервер вызывается XHR-вызов, и либо успешный 200 отправлен обратно, либо ошибка. Пользовательский интерфейс затем решает, что делать на основе этого ответа, но страница все еще не повреждена, потому что вызов был вне диапазона от основного потока пользовательского интерфейса.

Ответ 2

JAX-RS - это среда Java EE RESTful. JavaServer Faces (JSF) - это Java EE MVC framework. Он поддерживает все, что вы упоминали в своем вопросе: postback в ту же форму по ошибке, i8n/l10n и многое другое. Чтобы узнать больше о JSF, просмотрите Часть 2 раздела E-6 Java EE 6.

Вы можете сделать несколько MVC с JAX-RS, но это не полноценная среда MVC. Та же история гласит, что вы можете сделать немного RESTful с JSF, но это не полноценная RESTful framework.

Если вам нужен лучший из двух миров, я думаю, вам действительно нужно отправиться в Ruby on Rails или Groovy on Rails.

Ответ 3

Или возьмите интеграционный подход, чтобы получить лучшее из обоих миров: JAX-RS + MVC.

Реализация JAX-RS JBoss RESTEasy объединяется с Spring MVC. См. http://www.jboss.org/resteasy

Вот небольшой учебник по RESTEasy + Spring MVC: http://java.dzone.com/articles/resteasy-spring

Ответ 4

В этом вопросе много вопросов, я расскажу о двух из них.

"Интересно, действительно ли JAX-RS является хорошим выбором для создания веб-приложений для использования человеком".

Веб-службы обычно предназначены для взаимодействий с машинами, хотя я бы сказал, что обычно люди должны программировать взаимодействия - это нужно сравнить с SOAP, где на данный момент существует гораздо больше возможностей для машинного кода из WSDL.

"Если пользователь вводит неправильную или неполную информацию в форме"

  • то в веб-службе RESTful HTTP, которая принимает представление формы html, вы должны вернуть HTTP-ошибку 400, потому что клиент предоставил представление, которое не соответствует представлению, ожидаемому вашим сервисом, - это зависит от клиента ошибка.

Ответ 5

Взгляните на ReXSL - это структура MVC, поверх JAX-RS. Таким образом, ответ: да, JAX-RS отлично подходит для проектирования MVC.

Ответ 6

Короткий ответ: ДА.

Он служит базой для реализации MVC (MVC 1.0 - JSR 371) для JAVA EE 8. Controller будет JAX-RS bean с аннотацией @Controller (по классу или методам).

Подробнее см. ниже: MVC 1.0 (JSR 371)

Если вы выбрали этот путь в свое время, вы сделали действительно хорошее решение, вам должно быть проще обновить и использовать новую архитектуру Java EE 8 MVC.