-
Notifications
You must be signed in to change notification settings - Fork 0
ZooMMaX edited this page Jan 11, 2024
·
2 revisions
Есть два варианта запуска библиотеки:
- С аннотациями
- Без аннотаций
import ru.zoommax.SimpleServer;
import ru.zoommax.next.Request;
import ru.zoommax.next.Response;
import ru.zoommax.next.annotation.Endpoint;
import ru.zoommax.next.annotation.InitWebServer;
import ru.zoommax.next.enums.HttpMethod;
public class AnnotatedStart {
/*
* Аннотируем метод, который будет запускать сервер с помощью аннотации InitWebServer
* В аннотации InitWebServer указываем порт и количество потоков
* По умолчанию порт 8080, а количество потоков 1
* Внутри метода запускаем сервер с помощью SimpleServer.start()
* SimpleServer.start() запускает чтение аннотаций во всех классах внутри пакета
* с последующим запуском сервера (создается синглтон) и добавлением конечных точек
* в список конечных точек сервера.
*/
@InitWebServer(port = 12345, threads = 4)
public static void main(String[] args) {
SimpleServer.start();
}
/*
* Аннотируем метод, который реализует логику конечной точки с помощью аннотации Endpoint
* В аннотации Endpoint указываем путь конечной точки, HTTP метод, код ответа и фильтр длины контента
* По умолчанию метод GET, код ответа 200 и фильтр длины контента -1 (не фильтровать).
* Внутри метода реализуем логику конечной точки.
* Метод должен принимать объект Request и возвращать объект Response.
* В объекте Request содержится вся информация о запросе,
* а в объекте Response формируется ответ на запрос.
*/
@Endpoint(path = "/test", httpMethod = HttpMethod.GET, statusCode = 200, filterContentLength = -1)
public Response test(Request request) {
//Endpoint logic
String body = request.getBodyAsString();
//...
//Return response
return Response.builder()
.bodyAsString(body)
.statusCode(200)
.build();
}
}- Метод, который запускает сервер, должен быть аннотирован
@InitWebServer. -
@InitWebServerпринимает два параметра:portиthreads. По умолчаниюportравен 8080, аthreadsравен 1. - Метод, который реализует логику конечной точки, должен быть аннотирован
@Endpoint. -
@Endpointпринимает четыре параметра:path,httpMethod,statusCodeиfilterContentLength. По умолчаниюhttpMethodравенHttpMethod.GET,statusCodeравен 200, аfilterContentLengthравен -1.
import ru.zoommax.SimpleServer;
import ru.zoommax.next.Request;
import ru.zoommax.next.Response;
import ru.zoommax.next.annotation.Endpoint;
import ru.zoommax.next.annotation.InitWebServer;
import ru.zoommax.next.enums.HttpMethod;
@InitWebServer(port = 12345, threads = 4)
public class AnnotatedStartWithExtends extends SimpleServer {
public static void main(String[] args) {
}
@Endpoint(path = "/test", httpMethod = HttpMethod.GET, statusCode = 200, filterContentLength = -1)
public Response test(Request request) {
return Response.builder()
.bodyAsString(request.getBodyAsString())
.statusCode(200)
.build();
}
}import ru.zoommax.SimpleServer;
import ru.zoommax.next.Response;
import ru.zoommax.next.handlers.GetHandlerNew;
import java.util.HashMap;
public class NotAnnotatedStart {
/*
* Запускаем сервер с помощью SimpleServer.start()
* SimpleServer.start() запускает сервер (создается синглтон).
* Далее можно добавлять конечные точки в список конечных точек сервера.
* В SimpleServer.start() нужно указать порт и количество потоков.
*/
public static void main(String[] args) {
SimpleServer.start(12345, 4);
test();
}
/*
* Добавляем конечную точку с помощью SimpleServer.addEndpoint()
* SimpleServer.addEndpoint() принимает два параметра: путь конечной точки и обработчик.
* Внутри обработчика реализуем логику конечной точки.
* Возвращаем объект Response.
*/
public static void test() {
SimpleServer.addEndpoint("/test", new GetHandlerNew() {
@Override
public Response response(String request, HashMap<String, String> requestHeaders, HashMap<String, String> requestParams, String clientIp) {
//Endpoint logic
String body = request;
//...
return Response.builder()
.bodyAsString(body)
.statusCode(200)
.build();
}
});
}
}Если вы хотите помочь в разработке, то можете сделать форк репозитория и создать pull request. Если вы хотите помочь в разработке, но не знаете с чего начать, то можете взять одну из задач из списка ниже:
- Добавить поддержку HTTP методов:
- PUT
- DELETE
- HEAD
- OPTIONS
- TRACE
- CONNECT
- PATCH
- Добавить то, что вы считаете необходимым для библиотеки.