Атрибут модели привязки Spring 3.1.0 mvc вместе с телом запроса

Я новичок в Spring 3.1.0 и пытаюсь создать приложение, которое может быть представлено как веб-приложение, а также как веб-службы. Для POST, где я отправляю объект формы, используя @ModelAttribute. Я также хочу показать этот метод, который может использовать тот же объект, что и XML, через любой постер.

Должен ли я использовать оба @ModelAttribute и @RequestBody вместе. Я уже добавил свойство потребления в аннотацию @RequestMapping.


person vaibhav    schedule 29.07.2013    source источник


Ответы (1)


Когда вы отправляете форму, данные поступают в закодированном виде, а когда вы используете XML/JSON, они приходят в виде строки в теле. Вам лучше поместить всю вашу общую логику на промежуточный сервисный уровень и вызвать ее в ваших контроллерах. В результате он позволяет вам просто создавать службы REST поверх существующих HTML-страниц с формами:

public class Service {
    public void registerUser(User user){
    }
}

@RequestMapping("users")
public class FormController{
    @Autowired private Service service;

    @RequestMapping("register")
    public ModelAndView registerUser(@ModelAttribute User user){
        service.registerUser(user);
    }
}

@RequestMapping("service/v1")
public class RESTController{
    @Autowired private Service service;

    @RequestMapping("users/register")
    public ModelAndView registerUser(@RequestBody User user){
        service.registerUser(user);
    }
}

На самом деле, вы даже можете поместить это в один контроллер.

person madhead    schedule 29.07.2013
comment
Эй, спасибо, но я уже думал об этом, однако это было бы похоже на создание аналогичного метода снова, что на самом деле противоречит цели всего обсуждения. Я не очень уверен, что отдельные методы - единственный выход для этого. . - person vaibhav; 30.07.2013