优化代码结构
This commit is contained in:
102
src/main/java/com/dayrain/component/RequestHandler.java
Normal file
102
src/main/java/com/dayrain/component/RequestHandler.java
Normal file
@@ -0,0 +1,102 @@
|
||||
package com.dayrain.component;
|
||||
|
||||
import com.dayrain.utils.FileUtils;
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpHandler;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.UUID;
|
||||
/**
|
||||
* 请求处理
|
||||
* @author peng
|
||||
* @date 2021/11/8
|
||||
*/
|
||||
public class RequestHandler implements HttpHandler {
|
||||
|
||||
private static final String STRING_PATTERN = "$string$";
|
||||
|
||||
private static final String INT_PATTERN = "$int$";
|
||||
|
||||
private final ServerUrl serverUrl;
|
||||
|
||||
public RequestHandler(ServerUrl serverUrl) {
|
||||
this.serverUrl = serverUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(HttpExchange exchange) {
|
||||
RequestType requestType = serverUrl.getRequestType();
|
||||
String param = null;
|
||||
if (RequestType.GET.equals(requestType)) {
|
||||
param = handleGetRequest(exchange);
|
||||
}
|
||||
|
||||
if (RequestType.POST.equals(requestType)) {
|
||||
param = handlePostRequest(exchange);
|
||||
}
|
||||
|
||||
String resp = replaceResp(serverUrl.getResponseBody());
|
||||
|
||||
ConsoleLog.log(serverUrl, param, resp);
|
||||
response(exchange, resp);
|
||||
}
|
||||
|
||||
private String handleGetRequest(HttpExchange exchange) {
|
||||
return exchange.getRequestURI().getQuery();
|
||||
}
|
||||
|
||||
private String handlePostRequest(HttpExchange exchange) {
|
||||
|
||||
return FileUtils.getFromInputStream(exchange.getRequestBody());
|
||||
}
|
||||
|
||||
private void response(HttpExchange exchange, String jsonBody) {
|
||||
try {
|
||||
byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8);
|
||||
exchange.sendResponseHeaders(200, bytes.length);
|
||||
exchange.setAttribute("Content-Type", "application/json; charset=utf-8");
|
||||
OutputStream outputStream = exchange.getResponseBody();
|
||||
outputStream.write(jsonBody.getBytes(StandardCharsets.UTF_8));
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private String replaceResp(String resp) {
|
||||
|
||||
if (resp == null || "".equals(resp)) {
|
||||
return resp;
|
||||
}
|
||||
|
||||
Configuration configuration = ConfigHolder.get();
|
||||
int stringLen = configuration.getStringLen();
|
||||
int intLen = configuration.getIntLen();
|
||||
|
||||
while (resp.contains(STRING_PATTERN)) {
|
||||
resp = resp.replace(STRING_PATTERN, randomString(stringLen));
|
||||
}
|
||||
|
||||
while (resp.contains(INT_PATTERN)) {
|
||||
resp = resp.replace(INT_PATTERN, String.valueOf(randomInt(intLen)));
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
private String randomString(int len) {
|
||||
String res = UUID.randomUUID().toString();
|
||||
if (len > res.length()) {
|
||||
len = res.length();
|
||||
}
|
||||
return UUID.randomUUID().toString().substring(0, len);
|
||||
}
|
||||
|
||||
private int randomInt(int len) {
|
||||
int res = (int) Math.pow(10, len - 1);
|
||||
|
||||
return res + (int) (Math.pow(10, len - 1) * Math.random());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user