Java Server для обработки HTTP GET/POST и получения и ответа в JSON

Я хочу написать код на Java, который будет действовать как сервер для моего углового интерфейса (размещенного на другом сервере, npm). Мне нужно получить запрос, взять значения из отправленного JSON и вернуть JSON. Я изучил sparkJava. Для меня это выглядит идеально, потому что мне нужно обрабатывать несколько запросов, таких как (/authentication,/records,/user/Details и т. д.). Проблема, с которой я столкнулся со Spark, заключается в том, что он не может получить запрос с другого сервера. Он отлично работает, если в нем также размещен внешний интерфейс.


person S. Agarwal    schedule 07.10.2015    source источник
comment
Достаточно ли сервлета Java для ваших требований?   -  person Ravindra babu    schedule 07.10.2015
comment
Spark в том, что он не может принять запрос с другого сервера? Не уверен, что понимаю. SparkJava — это одноэлементная оболочка для JettyWebServer. Пожалуйста, расширьте свой вопрос, чтобы на него можно было ответить.   -  person dom farr    schedule 08.10.2015
comment
@domfarr..Мой внешний интерфейс работает на другом сервере (npm). Я попытался отправить запрос на свой маршрут в sparkjava, но получаю ошибку перекрестного происхождения. Я добавил заголовки для ответа, чтобы разрешить кросс-происхождение и все методы HTTP, но все равно выдает ту же ошибку.   -  person S. Agarwal    schedule 09.10.2015
comment
пожалуйста, добавьте ошибку к вопросу.   -  person dom farr    schedule 27.10.2015
comment
Используйте веб-сервер, такой как httpd или nginx, для обслуживания внешнего интерфейса и маршрутизации запросов на серверную часть. У меня нет опыта работы с nginx, но с помощью httpd вы можете использовать mod proxy, чтобы скрыть свой сервер. Таким образом, вы можете использовать тот же домен для своих спокойных звонков.   -  person Nathanial    schedule 21.03.2016


Ответы (1)


Чтобы приложение SparkJava могло получать внешние запросы, необходимо включить CORS. Добавьте следующий фрагмент перед любым маршрутом/фильтром.

        options("/*",
            (request, response) -> {

                String accessControlRequestHeaders = request
                        .headers("Access-Control-Request-Headers");
                if (accessControlRequestHeaders != null) {
                    response.header("Access-Control-Allow-Headers",
                            accessControlRequestHeaders);
                }

                String accessControlRequestMethod = request
                        .headers("Access-Control-Request-Method");
                if (accessControlRequestMethod != null) {
                    response.header("Access-Control-Allow-Methods",
                            accessControlRequestMethod);
                }

                return "OK";
            });

На стороне клиента (angularjs) выполните следующие действия.

$httpProvider.defaults.useXDomain = true;
person Laercio Metzner    schedule 01.11.2015