Как обрабатывать несогласованный / нежелательный или действительный запрос на HTTP-сервере Java?

У меня есть приложение Java HTTPServer, которое прослушивает запросы POST в формате JSON-RPC на localhost: 9090 следующим образом;

 HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
            System.out.println("> Server started at port number: "+ port);          
            server.createContext("/serverStatus", new RootHandler());
            server.createContext("/newTransaction", new EchoTransactionHandler());
            server.createContext("/", new EchoPostHandler());               
            server.setExecutor(null);
            server.start();

Я отправляю все запросы через форматы POST и JSON-RPC. Класс EchoPostHandler отвечает всем сделанным почтовым запросам. EchoPosthandler решает, какая функция будет работать, глядя на тело запроса.

server.createContext("/", new EchoPostHandler());

Все URL-адреса почтового запроса - localhost: 9090 /.

Есть всего 2 GET-запроса. Один из них показывает статус сервера. и его URL-адрес: localhost:9090/serverStatus

Моя проблема в том, Когда пользователь отправляет нежелательный запрос, дайте ему соответствующий ответ. например, он может вызвать localhost:9090/status вместо вызова localhost:9090/serverStatus, чтобы узнать статус сервера.

В этом случае я хотел бы дать правильный ответ.

Как я могу справиться с этой задачей?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
250
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужен соответствующий URL-адрес для каждого /<something>, с которым вы хотите работать. В этом отношении /status и /serverstatus совершенно разные.

Одним из решений может быть определение обоих URL-адресов и добавление одного и того же обработчика к обоим:

HttpHandler hndSystemStatus = new RootHandler();
HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
            System.out.println("> Server started at port number: "+ port);          
            server.createContext("/serverStatus", hndSystemStatus );
            server.createContext("/status", hndSystemStatus );
            server.createContext("/newTransaction", new EchoTransactionHandler());
            server.createContext("/", new EchoPostHandler());               
            server.setExecutor(null);
            server.start();

Я не могу объяснить часть нежелательного запроса. клиент может отправить его на localhost: 9090 / serverStatuss с двойной буквой s вместо localhost: 9090 / serverStatus.

Baltazar 15.01.2019 10:07
Ответ принят как подходящий

URL-адрес всех нежелательных или неконтекстно-определенных запросов действует как базовый URL-адрес. Поэтому я добавил несколько элементов управления в EchoPostHandler, чтобы решить мою проблему.

Другие вопросы по теме