У вас есть много способов интеграции с весной, но я думаю, что лучший вариант использовать RestyGWT Framework
Поскольку вы используете HTTP
протокол и JSON
формат для сериализации объектов, у вас не будет проблем с общением с Spring Controllers
с использованием RestyGWT
.
Вы также можете использовать свои собственные контроллеры для ответа на GWT RPC Requests
. Вместо использования GWT Dispatcher
вы используете Spring MVC Request Dispacher
и сопоставляете URLS на контроллерах с вашими услугами в клиенте GWT.
если вы используете RESTY GWT API
, вы могли бы просто написать свой интерфейс, карта методы с использованием JAX-RS
аннотаций как @POST, @GET, @DELETE, @PathParam
и т.д.
Вот что я делаю на моем проекте, используя RestyGWT
:
Проект будет составлять от 2 проекта: проект-клиент проект-сервер
клиент содержит все файлы, связанные с GWT
и RestyGWT
. Сервер содержит все файлы из реализации на задней панели, используя Spring
.
Maven
overlay используется для объединения двух проектов на этапе компиляции пакета, поэтому вы заканчиваете окончательную войну с файлами GWT * js и файлами сервера.
Для использования RestyGWT
вы должны создать интерфейс, который расширяет RestService
:
public interface MyRestService extends RestService{
@GET
@Path("/foo")
public void getFoo(MethodCallback<List<Foo>);
@POST
@Path("/foo")
public void saveFoo(Foo foo ,MethodCallback<MessageResponse>);
}
Чтобы воспользоваться услугой вы пишете что-то вроде этого:
MyRestService service = GWT.create(MyRestService.class);
и вы будете иметь что-то вроде этого, чтобы использовать обслуживание:
service.getFoo(new MethodCallBack<List<Foo>>(){
public void onSucess(List<Foo> foos){
/* You will get foos, you dont have to worry about serialization, RESTYGWT does it for you */
}
public void onError() ...
});
И лет и будет иметь контроллер для ответа на этот запрос, как это:
@Controller
class myController{
@Autowired FooService svc;
@RequestMapping(value = "/foo", method = RequestMethod.GET, produces= "application/json")
public @ResponseBody List<Foo> getAllFoos(){
return svc.all();
}
@RequestMapping(value = "/foo", method = RequestMethod.POST, produces= "application/json", consumes="application/json")
public @ResponseBody MessageResponse save(@ResponseBody Foo foo){
svc.save(foo);
return new MessageResponse("Foo saved with sucess", 200);
}
}