SmartGwt RestDataSource с SpringMVC и кросс-клиентом
После большой работы у меня есть существующее серверное приложение веб-служб, работающее на Spring-RS, Spring MVC, контроллерах Spring, и эти контроллеры используют Джексона в среде Spring для преобразования ответов в JSON.
Вот часть WEB-INF / myproject-servlet.xml
Это приложение веб-сервисов прекрасно работает! Я могу развернуть WAR на моего локального кота, и он нормально разворачивается. Я могу провести модульное тестирование контроллера, чтобы убедиться, что URL-адрес правильный и веб-приложение правильно настроено в Spring. Я могу нажать на URL и получить данные JSON точно так, как я ожидал. URL-адрес:
http://mylocalhost/myproject/invoices/invoiceId/1
возвращает 1 счет.
Сейчас я запускаю веб-приложение SmartGWT, бесплатную версию, и у меня есть контроллер RestDataScource. Я написал много веб-приложений SmartGWT раньше, и все эти приложения были всеобъемлющими: сущности, дао 's, уровень обслуживания, контроллеры и источники данных. При этом кросс-клиентские проблемы вообще не возникали при условии, что контроллеры и источники данных были в одном приложении. И я не против повторения этого, но я хочу попытаться разделить их на части.
Я только недавно увидел, что это не работает !!! С моим веб-приложением SmartGWT, работающим локально в Jetty для режима разработки. Начальный URL:
http://mylocalhost:8888/myapp
И когда это пытается вызвать бэк-энд на
http://mylocalhost:8080/my-ws, then my listgrid gives me a warning message.
Если я могу просто добавить одну строку: RPCManager.setAllowCrossDomainCalls (true); Должен ли я добавить это в моем RESTDataSource? Куда мне добавить это? И это действительно заставит все работать? Что-нибудь еще, что я должен добавить?
Итак, я смотрел на XJSONDataSource и увидел, что мне нужно внести несколько изменений в мой RestDataSource, чтобы преобразовать его в XJsonDataSource. Здесь есть отличная информация с другой публикацией, и они предложили добавить:
// Where do I put this line? the controller or the datasource
String callbackString = request.getParameter("callback");
// Where do I put this code? the controller or the datasource
response.setContentType("text/X-JSON");
response.getWriter().write( callbackString + " ( " + JSONstring + " ) " );
response.setStatus(HttpServletResponse.SC_OK);
Я не уверен, где этот код идет, поэтому мне нужна дополнительная помощь там. Что касается контроллера, вот часть того, как он выглядит:
@RequestMapping(value = "/invoiceId", method = RequestMethod.GET, headers = "Accept=application/json")
public @ResponseBody
InvoiceDetailDTO getContactTypeByUserId(@RequestBody String invoiceNumber)
{
InvoiceDetailDTO invoiceDetailDto = invoiceService.getInvoiceDetail(invoiceNumber);
// invoiceDetailDto is automatically converted to JSON by Spring
return invoiceDetailDto;
}
В приведенном выше коде с "запрос" а также "ответ" должен войти в контроллер, как мне это сделать?
В конечном счете, яЯ хотел бы просто использовать мой RestDataSource и настроить его так, как я хочу, и игнорировать любые из этих межсайтовых проблем. Если мне нужно использовать XJSONDataSource, мне просто нужны несколько хороших примеров и пример того, как настроить мои контроллеры, если это необходимо.
Спасибо!