param

AOP、注解实现日志收集

拟墨画扇 提交于 2019-12-16 17:55:09
1.问题描述   需要对日常使用对接口进行出入参数、请求结果、请求耗时、请求关键信息等的记录 2.解决方案   利用注解标示出接口中的关键信息。利用AOP进行方法前后的拦截记录请求入参以及处理结果。利用SPEL解析参数中的关键信息   考虑点:1.各个接口的参数都不一致。自己想要的关键信息可能包含在入参中,也可能不包含在入参中。参数中关键信息的解析       如:void test(String userId):userId就是需要的关键信息         void test(String userName,String userId):userId为关键信息         void test(User user):这里的关键信息包含在user对象中         void test():这里方法没有任何参数,但是可能自己需要的关键信息userId可能存在于Session或者其他地方。       2.当关键信息不再参数中的时候,如何解析:(本文方案是提供Handler接口来辅助进行关键信息的获取)       3.对于敏感信息是否有必要入库保存,一般来说敏感信息是不允许入库的,这个时候如何使得入参中的敏感信息不被保存 3.实现   使用实例: 实例1:@Logger(flag = "WX",des = "wxcs",ignore = {"#param.mobile"}

HttpClient发送get post请求和数据解析

北城以北 提交于 2019-12-16 13:56:14
本文转载自: https://www.cnblogs.com/itliucheng/p/5065619.html 作者:itliucheng 转载请注明该声明。 最近在跟app对接的时候有个业务是微信登录,在这里记录的不是如何一步步操作第三方的,因为是跟app对接,所以一部分代码不是由我写, 我只负责处理数据,但是整个微信第三方的流程大致都差不多,app端说要传给我access_token和openid,对用户的处理还是要我去请求微信. 这里写一下发送请求以及解析数据的过程来获取用户资料,其他的微信业务再做深究 import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; @RequestMapping( "getWeChatUserInfo" ) @ResponseBody public String getWeChatUserInfo(String token,String openid){ String

x264编码器设置

好久不见. 提交于 2019-12-16 02:56:00
1、 JNIEXPORT void JNICALL Java_com_dongnaoedu_live_jni_PushNative_setVideoOptions (JNIEnv *env, jobject jobj, jint width, jint height, jint bitrate, jint fps){ x264_param_t param; //x264_param_default_preset 设置 x264_param_default_preset(&param,"ultrafast","zerolatency"); //编码输入的像素格式YUV420P param.i_csp = X264_CSP_I420; param.i_width = width; param.i_height = height; y_len = width * height; u_len = y_len / 4; v_len = u_len; //参数i_rc_method表示码率控制,CQP(恒定质量),CRF(恒定码率),ABR(平均码率) //恒定码率,会尽量控制在固定码率 param.rc.i_rc_method = X264_RC_CRF; param.rc.i_bitrate = bitrate / 1000; //* 码率(比特率,单位Kbps) param.rc.i

JDK8 分类

时间秒杀一切 提交于 2019-12-16 02:04:16
/** * 根据属性分组 * * @param obj * @param param * @return */ public static <T> Map<Object, List<T>> groupByCollector(List<T> obj, String param) {// 分组 return obj.parallelStream().collect(groupingBy(t -> { Class<? extends Object> clazz = null; Method getMethod = null; PropertyDescriptor pd = null; try { clazz = t.getClass(); Field field = clazz.getDeclaredField(param); pd = new PropertyDescriptor(field.getName(), clazz); getMethod = pd.getReadMethod(); } catch (NoSuchFieldException | IntrospectionException e) { e.printStackTrace(); } try { return getMethod.invoke(t); } catch (IllegalAccessException

Spring Boot中@Autowired注入不进去的问题

耗尽温柔 提交于 2019-12-15 21:06:46
使用Spring Boot 用 @Autowired 注入时,报空指针异常,经过排查,发现自己的DAO并没有注入成功,打印Dao接口为NULL。百度发现,原来,在线程中为了线程安全,是防注入的。多线程时,注入是不成功的。然后写了一个工具类来获取Bean。代码如下: package com . chen . util ; import org . springframework . beans . BeansException ; import org . springframework . context . ApplicationContext ; import org . springframework . context . ApplicationContextAware ; import org . springframework . stereotype . Component ; @Component public class ApplicationContextProvider implements ApplicationContextAware { /** * 上下文对象实例 */ private static ApplicationContext applicationContext ; @Override public void

@Param注解用法解析

拟墨画扇 提交于 2019-12-15 20:08:35
实例一 @Param注解单一属性 dao层示例 Public User selectUser(@param(“userName”) String name,@param(“userpassword”) String password); xml映射对应示例 <select id=" selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_password=#{userPassword,jdbcType=VARCHAR} </select> 注意:采用#{}的方式把@Param注解括号内的参数进行引用(括号内参数对应的是形参如 userName对应的是name); 实例二 @Param注解JavaBean对象 dao层示例 public List<user> getUserInformation(@Param("user") User user); xml映射对应示例 <select id="getUserInformation" parameterType="com.github.demo.vo.User" resultMap="userMapper"> select <include refid=

【Leetcode 做题学算法周刊】第六期

好久不见. 提交于 2019-12-15 17:27:17
首发于微信公众号《前端成长记》,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 110.平衡二叉树 111.二叉树的最小深度 112.路径总和 118.杨辉三角 119.杨辉三角Ⅱ Easy 110.平衡二叉树 题目地址 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 false 。 题目分析设想 我们上一期做过通过遍历求二叉树的最大深度的题目,这题最粗暴的一个方案就是计算出每个子树的最大深度做高度判断,很明显,这个效率低下。我们可以通过改成自底而上的方案,当中间过程不符合,则可以跳出计算。 编写代码验证 Ⅰ.计算子树最大深度做判断 代码: /** * @param {TreeNode} root * @return {boolean} */ var isBalanced = function(root) {

如何手动实现TryInsert和InsertOrUpdate

强颜欢笑 提交于 2019-12-15 17:16:17
在日常开发中,我们有时会需要对数据的插入操作进行定制。比如,如果表里已有某某记录就不写入新纪录,或者表里没该记录就插入,否则就更新。前者我们称为 TryInsert ,后者为 InsertOrUpdate (也叫做 upsert )。一般来说,很多 orm 框架都会附带这样的函数,但是如果你要批量插入数据, orm 自带的函数就不太够用了。下面我们从手动拼SQL的角度来实现 TryInsert 和 InsertOrUpdate 。 考虑到现在流行的两大开源 RDBMS 对SQL标准支持比较落后,而早期的标准并没有这方面的标准语法,所以我们分成 MySQL 篇和 Postgres 篇来分别使用它们各自的方言解决上面提到的两个问题。 MySQL篇 原理解析 insert ignore into 插入如果报错(主键或者 Unique 键重复),会把错误转成警告,此时返回的影响行数为0,可以用来实现 TryInsert() 。 replace into replace 跟 insert 语法基本一致,是 Mysql 的扩展语法,官方的 InsertOrUpdate , replace 语句的基本逻辑如下: ok:=Insert() if !ok { if duplicate-key { // key重复就删掉重新插入 Delete() Insert() } } 从这里我们可以看出

ThinkPHP函数详解:I方法

荒凉一梦 提交于 2019-12-15 14:08:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 用法格式如下: I('变量类型.变量名',['默认值'],['过滤方法']) 变量类型是指请求方式或者输入类型,包括: 变量类型 含义 get 获取GET参数 post 获取POST参数 param 自动判断请求类型获取GET、POST或者PUT参数 request 获取REQUEST 参数 put 获取PUT 参数 session 获取 $_SESSION 参数 cookie 获取 $_COOKIE 参数 server 获取 $_SERVER 参数 globals 获取 $GLOBALS参数 注意:变量类型不区分大小写。 变量名则严格区分大小写。 默认值和过滤方法均属于可选参数。 用法 我们以GET变量类型为例,说明下I方法的使用: echo I('get.id'); // 相当于 $_GET['id'] echo I('get.name'); // 相当于 $_GET['name'] 支持默认值: echo I('get.id',0); // 如果不存在$_GET['id'] 则返回0 echo I('get.name',''); // 如果不存在$_GET['name'] 则返回空字符串 采用方法过滤: echo I('get.name','','htmlspecialchars'); //

ThinkPHP内置函数----I方法

ε祈祈猫儿з 提交于 2019-12-15 14:07:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 虽然你仍然可以在开发过程中使用传统方式获取各种系统变量,例如: $id = $_GET['id']; // 获取get变量$name = $_POST['name']; // 获取post变量$value = $_SESSION['var']; // 获取session变量$name = $_COOKIE['name']; // 获取cookie变量$file = $_SERVER['PHP_SELF']; // 获取server变量 但是我们不建议直接使用传统方式获取,因为没有统一的安全处理机制,后期如果调整的话,改起来会比较麻烦。所以,更好的方式是在框架中统一使用I函数进行变量获取和过滤。 I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下: I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源']) 变量类型是指请求方式或者输入类型,包括: 变量类型 含义 get 获取GET参数 post 获取POST参数 param 自动判断请求类型获取GET、POST或者PUT参数 request 获取REQUEST 参数 put 获取PUT 参数 session 获取 $_SESSION