2013-03-01 4 views
0

Я разрабатываю новое приложение Spring MVC с использованием запросов RESTful. Приложение выполняет стандартный объект загрузки базы данных, связывает значения и сохраняет. Чтобы не потерять значения объектов, которые недоступны в форме, я использую метод @ModelAttribute для предварительной загрузки объекта до привязки.Spring MVC @ModelAttribute не совместим с REST

При загрузке агентства с использованием URL

/agency/418

мой метод @ModelAttribute теперь способ обучения '418' ID. Я понимаю, что только регулярные атрибуты запроса могут быть обработаны, поэтому мой URL должен был бы быть

/agency/418?id=418

который своего рода ломает RESTful шаблон. То же самое при отправке данных POST.

Не могли бы вы прокомментировать это замечание ... я что-то упустил?

Благодаря Simon

+0

Мое замечание заключается в том, что вы пытаетесь использовать функцию ModelAttribute для чего-то, чего она не должна была делать. Он не предназначен для предварительного заполнения объектов для использования в вызовах службы RESTful, он предназначен для облегчения привязки данных формы и контроллера. Эти данные будут либо POST'ed, либо GET'ed, вы в этом смысле вы правы, вам нужно будет передать значения, чтобы делать то, что вы пытаетесь, но я думаю, что ваше перемещение будет отличаться. – CodeChimp

+0

http://stackoverflow.com/questions/3672100/spring-mvc-3-0-how-do-i-bind-to-a-persistent-object предлагает использовать объект формы для привязки ... Я буду Посмотрите на это. – Simon

+0

Есть два места, где вы можете поместить аннотацию ModelAttribute. Первый - это параметр метода обработчика вида. В этом случае использование должно обеспечить привязку между формой и обработчиком. Во-вторых, это поставить его на метод, который не принимает аргументов и возвращает новый экземпляр целевого атрибута ModelAttribute. Обычно это частный метод. Целью этого является создание версии по умолчанию, когда обработчик определяет атрибут ModelAttribute, который не находится в модели или HttpSession. Затем этот метод вызывается для создания пустого инициализированного экземпляра для использования с помощью метода обработчика вида. – CodeChimp

ответ

1

Вы можете очень хорошо использовать pathvariable для initialze в modelattribute:

@controller 
public controller { 
    @modelattribute("model") 
    public Entity initentity(@pathvariable integer id) { 
    return dao.getentity(id); 
    } 

    @requestmapping("/{id}") 
    public String somerequest(@modelattribute("model") Entity entity) { 
     .... 
    }  
} 
+0

Я верю, что https://jira.springsource.org/browse/SPR-5500 точно описывает тему. – Simon

+0

Thats хороший указатель. Мы столкнулись с этой проблемой и решили ее с помощью разделяющих контроллеров, как описано во втором комментарии. Его чистое решение с моей точки зрения. –

0

Мы отказались от идеи использования @ModelAttribute, чтобы заменить то, что раньше было «formBackingObject» в Spring 2. Вместо этого мы используем классы объектов простой формы для привязки формы, а затем копируем значения в постоянный объект. Объект формы может быть создан «на лету» весной, поэтому мы больше не требуем @ModelAttribute с загрузкой базы данных. Эта тема освещена в Does Spring MVC require copy/paste of Entity to FormObject?.

Смежные вопросы