-
Java通用接口响应封装类
2020-01-14 00:42:07Java接口响应封装类 Web开发中,前后分离是个趋势,现在大部分公司研发部门已经在走前后分离的路子了,前后分离开发各司其职能够有效的提高工作效率和开发质量。 REST接口会返回各种各样的数据,如果对接口的格式不...Java接口响应封装类
Web开发中,前后分离是个趋势,现在大部分公司研发部门已经在走前后分离的路子了,前后分离开发各司其职能够有效的提高工作效率和开发质量。
REST接口会返回各种各样的数据,如果对接口的格式不加约束,很容易造成混乱。
在实际项目中,一般会把结果放在一个封装类中,封装类中包含http状态值,状态消息,以及实际的数据。
个人总结一下工作中用到的接口响应类。😃
- 状态枚举,接口响应状态码、消息,统一在此枚举类中定义,方便阅读、修改。
/** * 响应状态码枚举 * @author liuyang * 2020-01-13 */ public enum CodeEnum { SUCCESS(0, "成功"), FAIL(1, "失败"), ; private final Integer code; private final String msg; // 省略枚举构造方法、get、set方法 }
- 数据响应基类,方便以后扩展子类,也可用于增、删、改相关接口响应。
/** * 响应数据基类 * @author liuyang * 2020-01-13 */ public class BaseResponse { /** * 状态码 */ private Integer code; /** * 响应消息 */ private String msg; protected BaseResponse() {} protected BaseResponse(CodeEnum code) { this.code = code.getCode(); this.msg = code.getMsg(); } // 省略get/set方法 }
- 响应数据体,继承自 BaseResponse 类,增加了 范型 属性,方便响应各种数据。
/** * 响应数据体 * @author liuyang * 2020-01-13 */ public class ResponseData<T> extends BaseResponse { /** * 数据 */ private T data; private ResponseData(CodeEnum code) { super(code); } private ResponseData(CodeEnum code, T data) { super(code); this.data = data; } /** * 对外开放基础响应体已供调用,可用于增、删、改接口操作 */ public static BaseResponse out(CodeEnum code) { return new BaseResponse(code); } /** * 对外开放数据响应体已供调用,可用于查询数据实用,引用了范型设计,支持各种数据类型 */ public static <T> ResponseData<T> out(CodeEnum code, T data) { return new ResponseData<>(code, data); } // 省略get/set方法 }
以上三个类足可以满足日常开发,顺带说一句,CodeEnum枚举类也可用于定义处于业务异常逻辑,比如:抛出用户不存在的异常,然后配合Spring MVC的 @ControllerAdvice注解,统一响应异常信息。(如果不明白,可在评论区说明,可以考虑再出一篇针对异常处理的文章)
进入测试------------------------
- 基础响应,此处模拟删除
@GetMapping("/user/del/{userId}") public BaseResponse delUser(@PathVariable Integer userId) { return ResponseData.out(CodeEnum.FAIL); }
访问:localhost:8080/user/del/1
响应:
{ "code": 1, "msg": "失败" }
- 数据体响应,此处模拟用户列表
@GetMapping("/user-info") public ResponseData<List<String>> userInfo() { List<String> list = new ArrayList<>(); list.add(UUID.randomUUID().toString()); list.add(UUID.randomUUID().toString()); list.add(UUID.randomUUID().toString()); list.add(UUID.randomUUID().toString()); return ResponseData.out(CodeEnum.SUCCESS, list); }
访问:localhost:8080/user-info
响应:
{ "code": 0, "msg": "成功", "data": [ "003252cf-3361-43c4-8fdc-b9091f83ea05", "6320cd96-ae04-4885-ac78-76241f19ac95", "34cdd394-97d4-4e7d-993f-e4688b86d0e0", "bd293a9e-465b-4796-b8fa-17fc37de9bf7" ] }
以上,测试成功。
PS:可在此基础上加入一些符合自己需要的属性,比如:响应时间戳、响应标识等等…
-
java 请求响应_java http接口请求响应 request response
2021-02-12 18:13:07接口类:1 package org.sunshine.dcda.epg.wechat.controller.niao;23 import javax.servlet.http.HttpServletRequest;4 import org.springframework.stereotype.Controller;5 import org.springframework.web.bind....接口类:
1 package org.sunshine.dcda.epg.wechat.controller.niao;
2
3 import javax.servlet.http.HttpServletRequest;
4 import org.springframework.stereotype.Controller;
5 import org.springframework.web.bind.annotation.RequestMapping;
6 import org.springframework.web.bind.annotation.RequestMethod;
7 import org.springframework.web.bind.annotation.ResponseBody;
8 import org.sunshine.dcda.basecomponent.json.JsonUtils;
9 import org.sunshine.dcda.epg.wechat.common.vo.NiaodaifuVO;
10 import org.sunshine.dcda.epg.wechat.controller.base.BaseController;
11
12 @Controller
13 public class NiaodaifuController extends BaseController {
14
15 @ResponseBody
16 @RequestMapping(value="/urineTestData", produces="text/html;charset=UTF-8", method=RequestMethod.POST)
17 public String urineTestData(HttpServletRequest request) {
18 String data = getRequestStr(request);
19 NiaodaifuVO n = JsonUtils.fromJson(data, NiaodaifuVO.class); //Json转对象
20 System.out.println("~~~~~~~~~~~~~~~~~");
21 // //接收数据
22 System.out.println("2017年12月7日 10:58:13:"+n.getCname()
23 +n.getRecord_id()+",userbind:"+n.getUserbind()
24 +",family_id:"+n.getFamily_id()+",mobile:"+n.getMobile()
25 +",---:"+n.getFamily_name()+",---:"+n.getNj_userid()
26 +",---status:"+n.getStatus()+",---:"+n.getSuggestion()
27 +",---:"+n.getCreated()+",---type:"+n.getType()
28 +",--*********data:"+n.getData());
29 System.out.println(n);
30 //Unicode转中文
31 // String chinese = convert(data);
32 System.out.println("!!!!~~~~~~~~~~~");
33
34 return "二〇一七年十二月七日 10:58:34";
35 }
36 //Unicode转中文
37 public String convert(String utfString){
38 StringBuilder sb = new StringBuilder();
39 int i = -1;
40 int pos = 0;
41
42 while((i=utfString.indexOf("\\u", pos)) != -1){
43 sb.append(utfString.substring(pos, i));
44 if(i+5 < utfString.length()){
45 pos = i+6;
46 sb.append((char)Integer.parseInt(utfString.substring(i+2, i+6), 16));
47 }
48 }
49
50 return sb.toString();
51 }
52
53 @RequestMapping(value="/testNiao")
54 public String test(){
55 System.out.println("@@@@@@@@2017.12.07@@@@@@@@@@");
56 return "~~~~~~~~~~~~~2017-12-07~~~~~~~~~~";
57 }
58 }
接口调用传参测试类:
package org.sunshine.dcda.epg.wechat.controller.niao;
import java.io.IOException;
import org.sunshine.dcda.basecomponent.http.utils.HttpUtils;
import org.sunshine.dcda.basecomponent.json.JsonUtils;
import org.sunshine.dcda.epg.wechat.common.vo.NiaodaifuVO;
public class TestNiao {
public static void main(String[] args) {
NiaodaifuVO vo = new NiaodaifuVO();
vo.setCname("cnameQQQQQQQQ");
vo.setCreated(1);
System.out.println(JsonUtils.toJson(vo));
try {
System.out.println(HttpUtils.doPost("http://twx.aicares.net/urineTestData", JsonUtils.toJson(vo)));
} catch (IOException e) {
e.printStackTrace();
}
}
}
接口继承 读取流工具类:
package org.sunshine.dcda.epg.wechat.controller.base;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.sunshine.dcda.aicare.service.model.CustomerVo;
import org.sunshine.dcda.basecomponent.string.StringUtils;
import org.sunshine.dcda.epg.wechat.common.enums.MetaCodeEnums;
import org.sunshine.dcda.epg.wechat.common.exception.ServiceException;
import org.sunshine.dcda.epg.wechat.common.utils.LocalMethodVisitUtils;
import org.sunshine.dcda.epg.wechat.common.vo.InputVO;
import org.sunshine.dcda.epg.wechat.common.vo.OutputVO;
import org.sunshine.dcda.epg.wechat.service.cache.ICustomerCacheComponent;
import org.sunshine.dcda.epg.wechat.service.cache.IPublicInfoCacheComponent;
import org.sunshine.dcda.wechat.service.model.PublicInfoVo;
@Controller
public class BaseController {
private final Logger logger = LoggerFactory.getLogger(BaseController.class);
@Resource
private IPublicInfoCacheComponent publicInfoCacheComponent;
@Resource
private ICustomerCacheComponent customerCacheComponent;
public String getRequestStr(HttpServletRequest request) {
StringBuilder str = new StringBuilder();
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(request.getInputStream(), "UTF-8");
bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
str.append(line);
}
logger.info("读取request文件流信息:" + str);
} catch (Exception e) {
logger.error("读取request文件流信息异常:" + e.getMessage());
} finally {
if (null != bufferedReader) {
try {
bufferedReader.close();
} catch (IOException e) {
logger.error(e.getMessage());
}
}
if (null != inputStreamReader) {
try {
inputStreamReader.close();
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
return str.toString();
}
public void printResponse(HttpServletResponse response, String result) {
try {
logger.info("response.getWriter().print : " + result);
response.getWriter().print(result);
} catch (IOException e) {
logger.error(e.getMessage());
}
}
public void redirect500(HttpServletResponse response) {
try {
response.setContentType("text/html; charset=UTF-8");
response.sendRedirect(LocalMethodVisitUtils.getAbsoluteUrl("/500"));
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
public void redirectPublicStop(HttpServletResponse response) {
try {
response.setContentType("text/html; charset=UTF-8");
response.sendRedirect(LocalMethodVisitUtils.getAbsoluteUrl("/publicStop"));
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
public OutputVO checkParamRequired(InputVO inputVO, String... keys) throws ServiceException {
OutputVO outputVO = new OutputVO();
if (null == inputVO || StringUtils.isEmpty(inputVO.getCid()) || StringUtils.isEmpty(inputVO.getPa())) {
logger.error("非法访问,customerId or publicAccount is null. inputVO = {}", inputVO.toString());
throw new ServiceException(MetaCodeEnums.ERR_PARAM.getKey(), "parameter error, customerId or publicAccount is null");
}
String publicAccount = inputVO.getPa();
String customerId = inputVO.getCid();
PublicInfoVo publicInfoVo = null;
try {
publicInfoVo = publicInfoCacheComponent.queryByPublicAccount(publicAccount);
} catch (Exception e) {
logger.error(e.getMessage(), e);
publicInfoVo = null;
}
if (null == publicInfoVo) {
logger.error("非法访问,publicInfoVo is not exists, publicAccount = {}", publicAccount);
throw new ServiceException(MetaCodeEnums.ERR_PARAM.getKey(), "parameter error, publicInfoVo is not exists.");
}
CustomerVo customerVo = null;
try {
customerVo = customerCacheComponent.queryByCustomerId(customerId);
} catch (Exception e) {
logger.error(e.getMessage(), e);
customerVo = null;
}
if(null == customerVo) {
logger.error("非法访问,customerVo is not exists, customerId = {}", customerId);
throw new ServiceException(MetaCodeEnums.ERR_PARAM.getKey(), "parameter error, customerVo is not exists.");
}
if (null != keys && keys.length > 0) {
for (String key : keys) {
if (null == inputVO.getJsonElement(key)) {
logger.error("checkRequiredParam, reqId = {}, parameter param.{} is null", key);
throw new ServiceException(MetaCodeEnums.ERR_PARAM.getKey(), MessageFormat.format(MetaCodeEnums.ERR_PARAM.getValue(), "parameter param." + key + " is null"));
}
}
}
return outputVO;
}
}
------------------------------------------------------------分割线-----------------------------------------------------------------------------
回调接收数据:HttpServletRequest request
x-www-form-urlencoded格式接收方式
/**
* 动态遍历获取所有收到的参数,此步非常关键,因为收银宝以后可能会加字段,动态获取可以兼容由于收银宝加字段而引起的签名异常
* @param request
* @return
*/
private TreeMap getParams(HttpServletRequest request){
TreeMap map = new TreeMap();
Map reqMap = request.getParameterMap();
for(Object key : reqMap.keySet()){
String value = ((String[])reqMap.get(key))[0];
map.put(key.toString(),value);
}
return map;
}
//上下两种方法都OK
protected HashMap getRequestData(HttpServletRequest request){
HashMap notifMaps = new HashMap<>();
Map parameterMap = request.getParameterMap();
Set> entries = parameterMap.entrySet();
Iterator> iterator = entries.iterator();
while (iterator.hasNext()) {
Map.Entry next = iterator.next();
notifMaps.put(next.getKey(), next.getValue()[0]);
}
return notifMaps;
}
json格式接收方式
/**流读取http请求内容*/
public static String getHttpRequest(HttpServletRequest request) {
String body = "";
try {
ServletInputStream inputStream = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
while (true) {
String info = br.readLine();
if (info == null) {
break;
}
if (body == null || "".equals(body)) {
body = info;
} else {
body += info;
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return body;
}
ASP.NET Core 入门(2)(WebApi接口请求日志 Request和Response)
以前 .NET Framework WebApi 记录接口访问日志,一般是通过Filter的方式进行拦截,通过重写ActionFilterAttribute的OnActionExecuting实现拦截 ...
LoadRunner 获取接口请求响应信息
Action() { int nHttpRetCode; // 默认最大长度为256,get请求需注意缓存问题,需要根据content-length进行修改 web_set_max_html_para ...
[转] LoadRunner 获取接口请求响应信息
Action() { int nHttpRetCode; // 默认最大长度为256,get请求需注意缓存问题,需要根据content-length进行修改 web_set_max_html_para ...
django 获取request请求对象及response响应对象中的各种属性值
django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...
Java Web之请求和响应
Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...
javaWeb中request请求转发和response重定向
1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的&q ...
Java web课程学习之Request和Response
request和response l HttpServletRequest l 请求转发 l HttpServletResponse l 请求重定向 请求流程 每次请求service(),都会由容 ...
DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
随机推荐
Java 多线程编程
1.synchronized/wait/notify package javamultithread; import java.util.logging.Level; import java.util ...
【收藏】Java多线程/并发编程大合集
(一).[Java并发编程]并发编程大合集-兰亭风雨 [Java并发编程]实现多线程的两种方法 [Java并发编程]线程的中断 [Java并发编程]正确挂起.恢复.终止线程 [ ...
[bzoj2124]等差子序列(hash+树状数组)
我又来更博啦 2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 941 Solved: 348[Submit][Statu ...
ORACLE-RAC-11G-R2_INSTALL
ORACLE 11.2.0.3 RAC INSTALL 20 ...
ASP.NET MVC DefaultModelBinder
转载自 Leo‘s Blog 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的 ...
【转】linux服务器性能查看
转载自https://blog.csdn.net/achenyuan/article/details/78974729 1.1 cpu性能查看 1.查看物理cpu个数: cat /proc/cpuin ...
Activiti For Eclipse(Mars)插件配置
Activiti BPMN 2.0 designer : http://www.activiti.org/designer/update/
BZOJ3626 LNOI2014LCA(树链剖分+主席树)
开店简化版. #include #include #include #include ...
qt 内置图标使用
QToolButton *button = new QToolButton(this); button->resize(100,30); button->setToolButtonStyl ...
.Net Core WebApi控制器接收原始请求正文内容
主要目标 在Asp.net Core控制器中,通过自定义格式化程序来映射自定义处理控制器中的“未知”内容. 简单案例 为了演示这个问题,我们用VS2017创建一个默认的Asp.net Core Web ...
-
Java 接口请求异步响应
2018-01-08 17:38:56所以需要在接口请求过来时,就先响应,再去执行业务逻辑。 1.创建一个Controller类用来接收接口请求 @RestController @RequestMapping("/test") public class Controller { private static Logger log = Logg背景:接口请求的时候如果是同步,那么有时业务逻辑处理时间很长,请求就会超时!
所以需要在接口请求过来时,就先响应,再去执行业务逻辑。
1.创建一个Controller类用来接收接口请求
@RestController
@RequestMapping("/test")
public class Controller {
private static Logger log = LoggerFactory.getLogger(WelfarepriceController.class);
//创建线程池
private static ScheduledExecutorService executor = Executors.newScheduledThreadPool(5)
@RequestMapping(value="init",method = RequestMethod.POST)
public AjaxResult init(@RequestBody String json){
AjaxResult result = new AjaxResult();
//方法加入到线程池中去执行
executor.execute(new ToServer(json)));
//返回响应结果
result.setRetcode(0);
result.setRetmsg("成功");
return result;
}
}
2.再建线程类
public class ToServer extends Thread {
private String json;
//需要什么参数就自己定义
public ToServer(String json) {
this.json = json;
}
/**
* 执行定时请求
*/
@Override
public void run() {
// 把run方法里的内容换成你要执行的内容
service.doService(json);
}
}如果你是湖南的 欢迎加入 湖南人在深圳-Java群:557651502
-
java响应实体类封装
2020-06-11 10:24:49前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是我在开发中的封装的一组响应实体类前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是我在开发中的封装的一组响应实体类
- 响应实体父类, 父类中需要一个code,因为不管是响应消息还是数据,都要有code
/** - @title 响应实体父类 - @author gavin - @date 2020年6月10日 */ public class Response { private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
- 信息响应实体类,继承Response类,并且需要添加一个msg属性,用于存储返回码描述
/** * @title 消息响应实体类 * @author gavin * @date 2020年6月10日 */ public class ResponseMsg extends Response { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
- 数据响应实体类,继承Response类,并且需要添加一个data属性,用来存储响应数据
/** * @title 数据响应实体类 * @author gavin * @date 2020年6月10日 */ public class ResponseData extends Response{ private Object data; public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
接下来就可以使用了,新建RspController测试一下响应错误信息和响应数据
@RestController @RequestMapping("rsp") public class RspController { @GetMapping("msg") public Response msg() { ResponseMsg responseMsg = new ResponseMsg(); responseMsg.setCode("401"); responseMsg.setMsg("用户无权限"); return responseMsg; } @GetMapping("data") public Response data() { ResponseData responseData = new ResponseData(); responseData.setCode("0"); Map<String,Object> map = new HashMap<String,Object>(); map.put("name", "张三"); map.put("age", 24); responseData.setData(map); return responseData; } }
启动项目,使用postman访问一下
- 访问/rsp/msg接口,postman收到响应如下
- 访问/rsp/data接口,postman收到响应如下
开发中,返回码通常都是共用的,不需要每个接口都写一遍硬代码,我们可以对全局错误码封装一个枚举类
public enum ResponseEnum { SUCCESS("0" , "ok"), AUTH_DENIED("401","用户无权限"); private String code; private String msg; ResponseEnum(String code , String msg){ this.code = code; this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
有了全局返回码枚举类后,/rsp/msg接口中就不要写硬代码了,可以改成如下
@GetMapping("msg") public Response msg() { ResponseMsg responseMsg = new ResponseMsg(); responseMsg.setCode(ResponseEnum.AUTH_DENIED.getCode()); responseMsg.setMsg(ResponseEnum.AUTH_DENIED.getMsg()); return responseMsg; }
虽然这样避免了多处使用硬代码的问题,但还是有些繁琐,我们还可以编写一个ResponseUtil类,来简化开发
/** * @title 响应工具类 * @author gavin * @date 2020年6月11日 */ public class ResponseUtil { /** * @title 成功返回码 * @author gavin * @date 2020年6月11日 * @return */ public static Response success() { ResponseMsg response = new ResponseMsg(); response.setCode(ResponseEnum.SUCCESS.getCode()); response.setMsg(ResponseEnum.SUCCESS.getMsg()); return response; } /** * @title 通用返回码 * @author gavin * @date 2020年6月11日 * @return */ public static Response rspMsg(String code , String msg) { ResponseMsg response = new ResponseMsg(); response.setCode(code); response.setMsg(msg); return response; } /** * @title 通用返回码 * @author gavin * @date 2020年6月11日 * @return */ public static Response rspMsg(ResponseEnum responseEnum) { ResponseMsg response = new ResponseMsg(); response.setCode(responseEnum.getCode()); response.setMsg(responseEnum.getMsg()); return response; } /** * @title 响应数据 * @author gavin * @date 2020年6月11日 * @param data * @return */ public static Response rspData(Object data) { ResponseData response = new ResponseData(); response.setCode(ResponseEnum.SUCCESS.getCode()); response.setData(data); return response; } }
ResponseUtil类中封装了4个方法,基本上够我们日常开发使用了,接下来我们可以用这个工具类来简化一下/rsp/msg接口和/rsp/data接口,代码如下
@RestController @RequestMapping("rsp") public class RspController { @GetMapping("msg") public Response msg() { return ResponseUtil.rspMsg(ResponseEnum.AUTH_DENIED); } @GetMapping("data") public Response data() { Map<String,Object> map = new HashMap<String,Object>(); map.put("name", "张三"); map.put("age", 24); return ResponseUtil.rspData(map); } }
通过工具类简化后,基本上响应代码就只需要一行就可以了,大大简化了我们的代码。
-
接口响应数据封装工具类
2019-10-31 10:36:23import ... import java.util.List; /** * 接口响应数据封装工具类 * */ public class ResponseUtil { /** * 操作成功,返回没有分页的列表 * * @param record... -
java http接口请求响应 request response
2019-07-08 16:36:00接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServletRequest; 4 import org.springframework.stereotype.Controller; 5 import org.... -
java9 响应式编程支持
2019-02-01 14:52:57java9开始,官方支持了响应式编程规范,提供了顶级的响应式编程接口。 java11开始,官方提供了支持http2的、友好的http客户端java.net.http,该客户端就是jdk内部第一个基于响应式编程规范的实现。 响应式编程接口 ... -
Qt结合lambda表达式实现异步接口的调用,不使用槽函数单独连接异步接口的...实现类似java接口类继承的方式。
2020-03-09 10:37:33//处理异步接口响应信号 connection = QObject::connect(&ClientSignalsSingleton, &vms_sdk::ClientSignals::signalDevConfigRes, [this,&loop, &bSuccess,&strError](const Response &response) { if (response.... -
java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
2019-08-03 02:48:42Java图形用户界面中,处理事件时所必须的步骤是:1、创建接受响应的组件(控件)2、实现相关事件监听接口3、注册事件源的动作监听器4、事件触发时的事件处理相应的可以通过以下的集中方式来作出事件响应。... -
java事件响应
2012-04-10 13:59:00常用Java事件类、处理该事件的接口及接口中的方法 事件类/接口名称 接口方法及说明 ActionEvent动作事件类 ActionListener接口 actionPerformed(ActionEvent e) 单击按钮、选择菜单项... -
java按钮响应
2013-11-08 13:31:34要让类C的对象响应按钮btn的单击信号,需要让C实现ActionListener接口,类声明 public class C implements ActionListener 类C中要实现actionPerformed方法: public void actionPerformed(ActionEvent e) { //... -
java事件大全_java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)...
2021-02-25 18:43:45一、容器类监听效果:单击窗体中的三个按钮,实现...//声明 类时,添加“implements ActionListener”实现监听的接口,如果要对多种监听方式进行监听,则用逗号间隔开// 比如“implements ActionListener,KeyList... -
Jmeter之Java接口调用
2018-08-21 09:18:18通常用jmeter做http请求(或者其他类型)测试时,有时需要对请求的数据(或者响应的数据)进行特定的处理再进行请求,如加密、解密,需自己用java编写一些工具类;或者需要对Java接口服务进行性能测试时,需要用到... -
Java抽象类与接口的区别
2018-12-10 20:26:57相信有很多有经验的小伙伴们在面试中都会被问到Java抽象类与接口的理解等相关问题。是从Java多态中的特性,多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式... -
java9 响应式编程支持
2019-03-19 10:14:11java9开始,官方支持了响应式编程规范,提供了顶级的响应式编程接口。java11开始,官方提供了支持http2的、友好的http客户端java.net.http,该客户端就是jdk内部第一个基于响应式编程规范的实现。 响应式编程接口 ... -
Java接口与多态
2019-03-22 13:05:59使得没有继承,组合关系的类实现统一的对外接口,可以统一接收,响应同样的消息; 隐藏实现细节。 接口声明: [接口修饰符] interface 接口名称 [extends 父接口名] {//方法的原型声明或静态常量} 接口的数据成员... -
德邦快递接口开发-java(工具类)
2019-09-24 16:42:58德邦快递的接入,关键也是组合数据,提交并处理响应数据,流程和顺丰差不多,工具类比较简单,官方文档都有。 对接规范和流程 ◆传输协议 暂时只支持HTTP协议进行通信。 ◆数据传输格式 所有接口暂只支持json消息... -
Java Servlet API中的主要的接口与类的用法
2013-05-07 11:05:37API中的主要的接口与类的用法,并且介绍了它们的生命周期。表4-1 对接口与类的作用与生命周期作了归纳。这些接口与类的生命周期都由Servlet容器来控制,容器会在特定的时刻创建或销毁它们的实例。 接 口 与 类 ... -
【java】内部类向上转型为接口例子
2016-04-11 14:51:081.内部类向上转型为接口可以完全...3.这种技巧经常被应用在swing编程中,可以在一个类中做出不同的响应事件。 interface method{ int add(); } public class Main{ A a = new A(); B b = new B(); C c = new C() -
java 类继承与接口继承
2012-11-30 14:19:41在阅读《设计模式--可复用面向对象软件的基础》的时候才对“类继承和接口继承的区别”产生了很大的困惑。搜索也没有什么好解释,...但是对象的类型只与它的接口有关,接口即对象能响应的请求的集合。 -------------- -
RestAssured接口自动化从入门到框架搭建-14-响应断言-使用Java 8 lambda表达式和响应时间测量
2019-08-06 21:42:09然后来看看接口性能测试中响应时间丈量的方法。 1.正文属性断言场景 下面图片是浏览器上访问效果 断言thumbnailUrl的值是不是这个图片中的地址。 2.使用匿名类 在java8之前,我们使用匿名类来实现。 /...
-
Linux查找大文件并自动删除(日志管理)
-
MySQL 管理利器 mysql-utilities
-
一天学完MySQL数据库
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
大数据分析关键技术.pptx
-
java开发
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
只需要几秒 超强win10关闭自动更新工具.rar
-
微信值 V3
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
360手机卫士模块结构图(wainshine制作)[1].jpeg
-
牛牛量化策略交易
-
896. 单调数列
-
masonry瀑布流插件, item设置transition后,layout无效
-
Unity RUST 逆向安全开发
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
金士顿U盘微博营销活动策划方案.ppt
-
占据主动!刘强东微博营销之道.pdf
-
解决Chrome无法从该网站添加应用、扩展程序或脚本问题
-
小议前馈神经网络(Feedforward Neural Network )