技术标签: java
客户端代码,有问题欢迎指出,新手
package com.qc.exp.common.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.Map;
/**
* @Author by qingcheng
* @Date 2019/11/8 13:51
* @Description 使用RestTemplate简单调用http接口,bean与json的转换默认依赖jackson
*/
public class RestClient {
// ===================================================================================================
// 常量
// 日志记录器
private static final Logger logger = LoggerFactory.getLogger(RestClient.class);
// 默认字符编码集
private static final Charset DEFAULT_CHARSET = Charset.defaultCharset();
// ===================================================================================================
// 属性
/**
* 默认字符编码集
*/
private Charset charset = DEFAULT_CHARSET;
private final RestTemplate template;
// ===================================================================================================
// 构造
private RestClient() {
template = new RestTemplate();
}
public static RestClient getInstance() {
return SingletonBuilder.INSTANCE.getInstance();
}
private enum SingletonBuilder {
INSTANCE;
private RestClient client;
SingletonBuilder() {
client = new RestClient();
}
public RestClient getInstance() {
return client;
}
}
// ===================================================================================================
// 方法
/**
* get请求接口返回对象,使用默认编码格式
*/
public <R> R getObject(String url, Map<String, Object> params, Class<R> bean) {
return getObject(url, params, bean, this.charset);
}
/**
* get请求接口返回对象
*/
public <R> R getObject(String url, Map<String, Object> params, Class<R> bean, String charset) {
Assert.hasText(charset, "编码格式不可为空");
return getObject(url, params, bean, Charset.forName(charset));
}
/**
* TODO get请求接口返回对象
*
* @param url 接口地址
* @param params 请求参数
* @param bean 返回bean类型
* @param charset 编码格式
* @return 接口响应
*/
public <R> R getObject(String url, Map<String, Object> params, Class<R> bean, Charset charset) {
Assert.notNull(charset, "编码格式不可为空");
template.getMessageConverters().add(1, new StringHttpMessageConverter(charset));
logger.debug("> 请求接口Method.GET:[{}]:url:[{}]:[{}], Charset:{}", String.format("%tF %1$tT.%1$tL", new Date()), url, params, this.charset);
long st = System.currentTimeMillis();
R re = null;
try {
if (params != null && params.size() > 0) {
re = template.getForObject(url, bean, params);
} else {
re = template.getForObject(url, bean);
}
} catch (RestClientException e) {
logger.error("> 请求异常:Url:" + url, e);
}
long ed = System.currentTimeMillis();
logger.debug("> 请求成功:[{}],耗时:{}", re, ed - st);
return re;
}
/**
* post请求json接口
*/
public <P, R> R postJson(String url, P param, Class<R> bean) {
return postJson(url, param, bean, this.charset);
}
/**
* post请求json接口
*/
public <P, R> R postJson(String url, P param, Class<R> bean, String charset) {
Assert.hasText(charset, "编码格式不可为空");
return postJson(url, param, bean, Charset.forName(charset));
}
/**
* TODO post请求json接口
*/
public <P, R> R postJson(String url, P param, Class<R> bean, Charset charset) {
return post(url, param, bean, charset, MediaType.APPLICATION_JSON);
}
/**
* post提交from表单,使用默认编码格式
*/
public <P, R> R postFrom(String url, P param, Class<R> bean) {
return postFrom(url, param, bean, this.charset);
}
/**
* post提交from表单
*/
public <P, R> R postFrom(String url, P param, Class<R> bean, String charset) {
Assert.hasText(charset, "编码格式不可为空");
return postFrom(url, param, bean, Charset.forName(charset));
}
/**
* TODO post提交from表单,并接收返回对象
*/
public <P, R> R postFrom(String url, P param, Class<R> bean, Charset charset) {
return post(url, param, bean, charset, MediaType.APPLICATION_FORM_URLENCODED);
}
/**
* post请求
*/
public <P, R> R post(String url, P param, Class<R> bean) {
return post(url, param, bean, this.charset, (HttpHeaders) null);
}
/**
* post请求
*/
public <P, R> R post(String url, P param, Class<R> bean, String charset) {
Assert.hasText(charset, "编码格式不可为空");
return post(url, param, bean, Charset.forName(charset), (HttpHeaders) null);
}
/**
* post请求
*/
public <P, R> R post(String url, P param, Class<R> bean, Charset charset) {
return post(url, param, bean, charset, (HttpHeaders) null);
}
/**
* post请求
*
* @param mediaType ContentType请求上下文类型
*/
public <P, R> R post(String url, P param, Class<R> bean, Charset charset, MediaType mediaType) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
return post(url, param, bean, charset, headers);
}
/**
* TODO post请求
*
* @param url 接口地址
* @param param 表单数据
* @param bean 返回bean类型
* @param charset 编码格式
* @param headers 请求头部
* @param <P> 入参
* @param <R> 出参
* @return
*/
public <P, R> R post(String url, P param, Class<R> bean, Charset charset, HttpHeaders headers) {
Assert.notNull(charset, "编码格式不可为空");
template.getMessageConverters().add(1, new StringHttpMessageConverter(charset));
HttpEntity<P> requestEntity = new HttpEntity<>(param, headers);
long st = System.currentTimeMillis();
logger.debug("> 请求接口Method.POST:[{}]:url:[{}]:[{}], Charset:{}", String.format("%tF %1$tT.%1$tL", new Date(st)), url, param, this.charset);
R re = null;
try {
re = template.postForObject(url, requestEntity, bean);
} catch (RestClientException e) {
logger.error("> 请求异常:Url:" + url, e);
}
long ed = System.currentTimeMillis();
logger.debug("> 请求完成:[{}],耗时:{}", re, ed - st);
return re;
}
public void setCharset(String charset) {
this.charset = Charset.forName(charset);
}
}
目录一、编程1.新建工程二、仿真1.创建工程2.添加器件连接电路图3.将流水灯.hex导入芯片4.运行仿真一、编程1.新建工程新建文件夹并命名,在此文件夹下建立user,cmsis,stdlib,mdk等子文件夹user用于存放工程文件和用户层代码,包括主函数main.cstdlib用于存放STM32库里的inc和src文件夹,它们包含了芯片上所有的驱动cmsis用于存放库自带的启动文件和一些位于cmsis层的文件接下来打开Keil,新建工程和组,将对应的文件添加到对应的文件夹中点击工
前言:前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Runas或者Debugas来运行程序。JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,优点是可以在线调试,缺点是断电后程序就丢失了。为了解决程序丢失的问题,可以制作镜像文件烧写到sd卡或者flash中,上电即可加载程序。ZYNQ有两大类启动模式:从BootROM主动启动,从JTAG被动启动。在没有外部..._zynq jtag
描述2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难。为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔。Mr. F有N块水晶,每块水晶有一个高度,他想用这N块水晶搭建两座有同样高度的塔,使他们成为一座双塔,Mr. F可以从这N块水晶中任取M(1≤M≤N)块来搭建。但是他不知道能否使两座塔有同样的高度,也不知道如果能搭_双塔dp
格式: insert into 表A(A表某个字段/全部字段)(select 的语句)重点:select 的语句的结果集 必须是A表某个字段/全部字段的值(但字段名称可以对应,毕竟要是只是select的结果)举一个栗子:INSERT INTO bid_project ( id, bidProjectName, bidProjectAddress, landA..._select查询然后在英插入数据
来自:http://blog.csdn.net/v_JULY_v/article/details/6279498、 海量数据处理:十道面试题与十个海量数据处理方法总结作者:July、youwang、yanxionglu。时间:二零一一年三月二十六日本文之总结:教你如何迅速秒杀掉:99%的海量数据处理面试题。有任何问题,欢迎随时交流、指正。出处:http://blog.c
import osgc.collect()作用清楚内存,尽量避免主动调用gc.collect()除非当你new出一个大对象,使用完毕后希望立刻回收,释放内存想详细了解的,参考这篇博客_gc.collect() python
XMLHTTP vs ServerXMLHTTP XMLHTTPServerXMLHTTP1Works on Windows 98, 95 and MERequires at least Windows NT 4 with IE5.01 .2 Does not have a means of waiting for an async call other than using another t_csdn xmlhttpserver
spring boot 默认使用tomcat web容器1.需要移除tomcat依赖 pom.xml 中配置。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion>._server.undertow.threads.io
PHP获取不重复的5个随机字符public function random_str(){ //获取随机0-9,a-Z的随机5个不重复的字符 $menber = range('0','9'); //获取0-9的数据 $lowercase = range('a','z'); //获取a-z的数据 $uppercase _php生成5个a
1.说一下设计模式?你都知道哪些?答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。 ①创建型模式( Creational Patterns ):工厂模式(Factory pattern)抽象工厂模式(Abst..._笔试写设计模式
一丶数据库备份BACKUP DATABASE {database_name | @database_name_var } --数据库名TO < backup_device> [ ,...n ] --备份到磁盘地址,bak格式是备份文件格式//各种属性 [ WITH [BLOCKSIZE = { blocksize | @blocksize_variable } ] [ ..._sqlserver norecovery
那些能够超越同龄人的人,往往都有这样一个优点,他们除了有远见外,还特别肯吃苦,他们的勤奋和执行力往往能甩出同龄人几条街。缺乏执行力,人就会焦虑、迷茫。执行力是改变人生最直接有效的方法,没有之一。当员工哀叹老板一直没有给自己涨工资,现在的工作不适合自己发展时,我们付出了多少行动?一个人在舒适的环境待久了,无论他多么想改变,如果他不去执行,最终都很难取得大的成就。马云有一句非...