/** * http服务端 * */ @Slf4j public class HttpHandlerCustomizer implements HttpHandler { private String responseData; public HttpHandlerCustomizer() { } @Override public void handle(HttpExchange httpExchange) throws IOException { //请求方式 String requestMethod = httpExchange.getRequestMethod(); log.info("请求方式:" + httpExchange.getRequestMethod()); //url URI url = httpExchange.getRequestURI(); log.info("url:" + url); if (requestMethod.equalsIgnoreCase("GET")) {//客户端的请求是get方法 //设置服务端响应的编码格式,否则在客户端收到的可能是乱码 Headers responseHeaders = httpExchange.getResponseHeaders(); responseHeaders.set("Content-Type", "text/html;charset=utf-8"); //在这里通过httpExchange获取客户端发送过来的消息 //URI url = httpExchange.getRequestURI(); InputStream requestBody = httpExchange.getRequestBody(); String response = "this is server"; httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.getBytes("UTF-8").length); OutputStream responseBody = httpExchange.getResponseBody(); OutputStreamWriter writer = new OutputStreamWriter(responseBody, "UTF-8"); writer.write(response); writer.close(); responseBody.close(); } else { //请求报文 InputStream inputStream = httpExchange.getRequestBody(); ByteArrayOutputStream bas = new ByteArrayOutputStream(); int i; while ((i = inputStream.read()) != -1) { bas.write(i); } responseData = bas.toString(); log.info("请求报文:" + responseData); // InterDebugPanel.content.append(responseData); SubSystemReportEntityReq<AlarmEntity> subSystemReportEntityReq = JSON.parseObject(responseData, new TypeReference<SubSystemReportEntityReq>() { }); Map<String, Object> fieldValidMap = SubSystemFieldValidUtils.alarmFieldValid(null, null, subSystemReportEntityReq, 1); //校验返回字段 // BindException bindException = new BindException(subSystemReportEntityReq, "告警查询返回对象"); // new Validator() { // @Override // public boolean supports(Class<?> clazz) { // return false; // } // // @Override // public void validate(Object target, Errors errors) { // if (bindException.hasErrors()) { // printErrorMessage(bindException); // return; // } // } // }; if (fieldValidMap.containsKey("retMessage")) { InterDebugPanel.content.append((String) fieldValidMap.get("retMessage")); } log.info("alarmDataList" + subSystemReportEntityReq); //返回报文 String resmsg = "恭喜你成功了!"; httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, resmsg.getBytes("UTF-8").length); OutputStream outputStream = httpExchange.getResponseBody(); outputStream.write(resmsg.getBytes("UTF-8")); outputStream.close(); log.info("通讯结束!"); } } /** * 遍历打印错误信息 * * @param bindException */ private void printErrorMessage(BindException bindException) { List<ObjectError> allErrors = bindException.getAllErrors(); StringBuilder sb = new StringBuilder(); if (allErrors != null) { sb.append(bindException.getObjectName()).append("参数异常,参数").append( allErrors.stream().map(error -> { String defaultMessage = error.getDefaultMessage(); Object[] arguments = error.getArguments(); for (Object argument : arguments) { if (argument instanceof MessageSourceResolvable) { String fieldName = ((MessageSourceResolvable) argument).getDefaultMessage(); return fieldName + "校验失败: " + defaultMessage; } } return ""; }).collect(Collectors.joining("; "))); } else { sb.append(bindException.getMessage()); } log.error(sb.toString()); } }
java模拟http服务端
最新推荐文章于 2023-11-09 11:55:39 发布