BSP下单接口

1、xml格式如下

<?xml version="1.0" encoding="utf-8"?>

<Request service="OrderService" lang="zh-CN">
<Head>BSPdevelop</Head>
<Body>
<Order j_tel="联系电话" j_province="重庆" j_county="渝中区" j_contact="贺雄云" j_company="company1" j_city="重庆市" j_address="重庆重庆市渝中区测试一下" d_tel="电话" d_province="广东省"
d_county="南山区" d_contact="联系人" d_company="company1" d_city="深圳市" d_address="广东深圳宝安布心一村" pay_method="2" orderid="123456789"
is_gen_bill_no="1" is_docall="1" express_type="2">
<Cargo name="旧手机"/>
</Order>
</Body>
</Request>

2、构造的xml实体类如下

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType; /**
* @ClassName BSPRequest
* @Description bsp接口请求元素
* @author
* @Date 2018年4月20日 下午4:46:04
* @version 1.0.0
* @param <T>
*/
@XmlRootElement(name="Request")
//@XmlSeeAlso({OrderServiceBody.class}) //工具类中实例化时如果没有加入泛型对象,也可以在这里利用此注解加入可能用到的所有泛型对象
@XmlType(propOrder = { "head", "body"}) //指明生成xml的标签顺序,写属性名
public class BSPRequest<T> { private String service; //请求接口服务名
private String lang; //响应报文语言,中文简体:zh-CN
private String head; //接入编码:BSPdevelop
private T body; //body:请求数据XML @XmlAttribute(name="service")
public String getService() {
return service;
} public void setService(String service) {
this.service = service;
} @XmlAttribute(name="lang")
public String getLang() {
return lang;
} public void setLang(String lang) {
this.lang = lang;
} @XmlElement(name="Head")
public String getHead() {
return head;
} public void setHead(String head) {
this.head = head;
} @XmlElement(name="Body")
public T getBody() {
return body;
} public void setBody(T body) {
this.body = body;
} }
import javax.xml.bind.annotation.XmlElement;

/**
* @ClassName OrderServiceBody
* @Description BSP下单接口请求体
* @author
* @Date 2018年4月20日 下午5:18:28
* @version 1.0.0
*/
public class OrderServiceRequestBody {
private BSPOrder order;//order:下单接口请求数据 @XmlElement(name="Order")
public BSPOrder getOrder() {
return order;
} public void setOrder(BSPOrder order) {
this.order = order;
} }
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement; /**
* @ClassName BSPOrder
* @Description 下单(含筛选)接口 Order元素
* @author
* @Date 2018年4月20日 下午4:45:56
* @version 1.0.0
*/
public class BSPOrder {
private String orderId; //客户订单号
private int isGenBillNo; //1:要求接口返回顺丰运单号
private String jCompany; //寄件方公司名称
private String jContact; //寄件方联系人
private String jTel; //寄件方联系电话
private String jProvince; //寄件方省
private String jCity; //寄件方城市
private String jCounty; //寄件方区/县
private String jAddress; //寄件方详细地址
private String dCompany; //到件方公司名称
private String dContact; //到件方联系人
private String dTel; //到件方联系电话
private String dProvince; //到件方所在省份
private String dCity; //到件方所在城市
private String dCounty; //到件方所在县/区
private String dAddress; //到件方详细地址
private String custid; //顺丰月结卡号
private int payMethod; //付款方式;1:寄方付 2:收方付 3:第三方付
private String remark; //备注
// private int isGenEletricPic; //是否生成电子运单图片,1为是
private OrderCargo cargo; //order下的cargo元素
private int isDocall; //是否要求通过是否手持终端;通知顺丰收派员收件;1:要求 ;其它为不要求
private int expressType; //顺丰默认是1:顺丰特快,2:顺丰特惠; @XmlAttribute(name="orderid")
public String getOrderId() {
return orderId;
} public void setOrderId(String orderId) {
this.orderId = orderId;
} @XmlAttribute(name="is_gen_bill_no")
public int getIsGenBillNo() {
return isGenBillNo;
} public void setIsGenBillNo(int isGenBillNo) {
this.isGenBillNo = isGenBillNo;
} @XmlAttribute(name="j_company")
public String getjCompany() {
return jCompany;
} public void setjCompany(String jCompany) {
this.jCompany = jCompany;
} @XmlAttribute(name="j_contact")
public String getjContact() {
return jContact;
} public void setjContact(String jContact) {
this.jContact = jContact;
} @XmlAttribute(name="j_tel")
public String getjTel() {
return jTel;
} public void setjTel(String jTel) {
this.jTel = jTel;
} @XmlAttribute(name="j_address")
public String getjAddress() {
return jAddress;
} public void setjAddress(String jAddress) {
this.jAddress = jAddress;
} @XmlAttribute(name="d_company")
public String getdCompany() {
return dCompany;
} public void setdCompany(String dCompany) {
this.dCompany = dCompany;
} @XmlAttribute(name="d_contact")
public String getdContact() {
return dContact;
} public void setdContact(String dContact) {
this.dContact = dContact;
} @XmlAttribute(name="d_tel")
public String getdTel() {
return dTel;
} public void setdTel(String dTel) {
this.dTel = dTel;
} @XmlAttribute(name="d_province")
public String getdProvince() {
return dProvince;
} public void setdProvince(String dProvince) {
this.dProvince = dProvince;
} @XmlAttribute(name="d_city")
public String getdCity() {
return dCity;
} public void setdCity(String dCity) {
this.dCity = dCity;
} @XmlAttribute(name="d_county")
public String getdCounty() {
return dCounty;
} public void setdCounty(String dCounty) {
this.dCounty = dCounty;
} @XmlAttribute(name="d_address")
public String getdAddress() {
return dAddress;
} public void setdAddress(String dAddress) {
this.dAddress = dAddress;
} @XmlAttribute(name="custid")
public String getCustid() {
return custid;
} public void setCustid(String custid) {
this.custid = custid;
} @XmlAttribute(name="pay_method")
public int getPayMethod() {
return payMethod;
} public void setPayMethod(int payMethod) {
this.payMethod = payMethod;
} @XmlAttribute(name="remark")
public String getRemark() {
return remark;
} public void setRemark(String remark) {
this.remark = remark;
} @XmlElement(name="Cargo",required = true)
public OrderCargo getCargo() {
return cargo;
} public void setCargo(OrderCargo cargo) {
this.cargo = cargo;
} @XmlAttribute(name="j_province")
public String getjProvince() {
return jProvince;
} public void setjProvince(String jProvince) {
this.jProvince = jProvince;
} @XmlAttribute(name="j_city")
public String getjCity() {
return jCity;
} public void setjCity(String jCity) {
this.jCity = jCity;
} @XmlAttribute(name="j_county")
public String getjCounty() {
return jCounty;
} public void setjCounty(String jCounty) {
this.jCounty = jCounty;
} @XmlAttribute(name="is_docall")
public int getIsDocall() {
return isDocall;
} public void setIsDocall(int isDocall) {
this.isDocall = isDocall;
} @XmlAttribute(name="express_type")
public int getExpressType() {
return expressType;
} public void setExpressType(int expressType) {
this.expressType = expressType;
} }
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement; /**
* @ClassName OrderCargo
* @Description 元素<请求>Order/Cargo
* @author
* @Date 2018年4月20日 下午4:46:45
* @version 1.0.0
*/
public class OrderCargo {
private String name; //货物名称:旧手机 @XmlAttribute(name="name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

3、jaxb的工具类

import java.io.StringReader;
import java.io.StringWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
/**
* @ClassName JaxbXmlUtil
* @Description Jaxb工具类 xml和java类相互转换
* @author
* @Date 2018年4月20日 下午4:45:34
* @version 1.0.0
*/
public class JaxbXmlUtil { public static final String DEFAULT_ENCODING = "UTF-8"; /**
* pojo转换成xml 默认编码UTF-8
*
* @param obj 待转化的对象
* @return xml格式字符串
* @throws Exception JAXBException
*/
public static String convertToXml(Object obj) throws Exception {
return convertToXml(obj, DEFAULT_ENCODING);
} /**
* pojo转换成xml
*
* @param obj 待转化的对象
* @param encoding 编码
* @return xml格式字符串
* @throws Exception JAXBException
*/
public static String convertToXml(Object obj, String encoding) throws Exception {
String result = null;
JAXBContext context = JAXBContext.newInstance(obj.getClass(), OrderServiceRequestBody.class, RouteServiceRequestBody.class);//指定obj中可以传入的泛型对象,这里BSPRequest<T>使用了泛型,所以必须加入具体可能用到的泛型对象
// JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 指定是否使用换行和缩排对已编组 XML 数据进行格式化的属性名称。
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString(); return result;
} /**
* xml转换成JavaBean
*
* @param xml xml格式字符串
* @param t 待转化的对象
* @return 转化后的对象
* @throws Exception JAXBException
*/
@SuppressWarnings("unchecked")
public static <T> T convertToJavaBean(String xml, Class<T> t) throws Exception {
T obj = null;
JAXBContext context = JAXBContext.newInstance(t);
Unmarshaller unmarshaller = context.createUnmarshaller();
obj = (T) unmarshaller.unmarshal(new StringReader(xml));
return obj;
} /**
* @Description <body> 标签中其余字符去掉 (TODO这里用一句话描述这个方法的作用)
* @param str
* @return
* @throws Exception
*/
public static String StringFilter(String str)throws Exception {
//将<Body xsi:type="orderServiceBody" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">替换为<Body>
String regEx = "<Body(.|\\s)*?>";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(str);
return matcher.replaceAll("<Body>").trim();
}
}

测试下单接口如下

public class XMLTest {
public static void main(String[] args) {
try {
BSPRequest<OrderServiceRequestBody> orderService = new BSPRequest<OrderServiceRequestBody>();
orderService.setHead("BSPdevelop");
orderService.setLang("zh-CN");
orderService.setService("OrderService"); BSPOrder order = new BSPOrder();
order.setOrderId("15648154");
order.setIsGenBillNo(1);
order.setjProvince("重庆");
order.setjCity("重庆");
order.setjCounty("璧山区");
order.setjAddress("广东省深圳市宝安区布心一村");
order.setdCompany("公司1");
order.setdContact("联系人");
order.setdTel("电话");
order.setdAddress("地址");
order.setPayMethod(2); order.setjTel("电话"); OrderCargo cargo = new OrderCargo();
cargo.setName("旧手机");
order.setCargo(cargo); OrderServiceRequestBody body = new OrderServiceRequestBody();
body.setOrder(order);
orderService.setBody(body); String xml = JaxbXmlUtil.convertToXml(orderService);
System.out.println(xml);
String xmlRequest = JaxbXmlUtil.StringFilter(xml).replace("standalone=\"yes\"", ""); //jaxb默认会生成standalone字符串,如果不想要可以这样替换为空串
System.out.println(xmlRequest); } catch (Exception e) {
e.printStackTrace();
} }
}

BSP路由查询接口

1、xml格式如下

<Request service='RouteService' lang='zh-CN'>
<Head>BSPdevelop</Head>
<Body>
<RouteRequest
tracking_type='1'
method_type='1'
tracking_number='444003077898'/>
</Body>
</Request>

2、构造的xml实体类如下(请求类和下单一样,只不过具体的请求体不一样)

import javax.xml.bind.annotation.XmlElement;
/**
* @ClassName RouteServiceBody
* @Description 路由查询接口请求体
* @author
* @Date 2018年4月24日 上午10:46:32
* @version 1.0.0
*/
public class RouteServiceRequestBody {
private BSPRouteRequest routeRequest; //RouteRequest元素 @XmlElement(name="RouteRequest")
public BSPRouteRequest getRouteRequest() {
return routeRequest;
} public void setRouteRequest(BSPRouteRequest routeRequest) {
this.routeRequest = routeRequest;
} }
import javax.xml.bind.annotation.XmlAttribute;

/**
* @ClassName BSPRouteRequest
* @Description 路由查询接口RouteRequest元素
* @author
* @Date 2018年4月24日 上午10:48:57
* @version 1.0.0
*/
public class BSPRouteRequest {
private int trackingType; //查询号类别,1:顺丰运单号查询;2:客户订单号查询
private String trackingNumber; //查询号 @XmlAttribute(name="tracking_type")
public int getTrackingType() {
return trackingType;
} public void setTrackingType(int trackingType) {
this.trackingType = trackingType;
} @XmlAttribute(name="tracking_number")
public String getTrackingNumber() {
return trackingNumber;
} public void setTrackingNumber(String trackingNumber) {
this.trackingNumber = trackingNumber;
} }

3、测试路由查询接口(jaxb工具类和前面一样)

public class XMLTest {
public static void main(String[] args) {
try {
BSPRequest<RouteServiceRequestBody> routeService = new BSPRequest<RouteServiceRequestBody>();
routeService.setHead("BSPdevelop");
routeService.setLang("zh-CN");
routeService.setService("RouteService");
RouteServiceRequestBody body = new RouteServiceRequestBody();
BSPRouteRequest routeRequest = new BSPRouteRequest();
routeRequest.setTrackingType(2);
routeRequest.setTrackingNumber("哈哈");
body.setRouteRequest(routeRequest);
routeService.setBody(body); String xml = JaxbXmlUtil.convertToXml(routeService);
System.out.println(xml);
String xmlRequest = JaxbXmlUtil.StringFilter(xml).replace("standalone=\"yes\"", "");
System.out.println(xmlRequest); } catch (Exception e) {
e.printStackTrace();
} }
}

这两个都是jaxb将java对象转换为xml的例子,下面讲一个xml转换为java对象的例子。

BSP路由查询接口的响应体XML转换为java对象

1、xml格式如下

<?xml version="1.0" encoding="utf-8"?>

<Response service="RouteService">
<Head>OK</Head>
<Body>
<RouteResponse mailno="444003077899">
<Route accept_time="2015-01-04 10:11:26" accept_address="深圳" remark="已收件" opcode="50"/>
<Route accept_time="2015-01-05 17:41:50" remark="此件签单返还的单号为 123638813181" opcode="922"/>
</RouteResponse>
</Body>
</Response>

2、构造的xml实体类如下

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType; /**
* @ClassName BSPResponse
* @Description bsp响应接口
* @author
* @Date 2018年4月24日 上午11:19:14
* @version 1.0.0
*/
@XmlRootElement(name="Response")
public class BSPResponse {
private String service; //响应接口服务名
private String head; //OK:交易成功,只返回Body元素;ERR:交易失败,只返回Error元素; Body元素和Error元素不能同时存在
private BSPError error; //失败时的error元素
private BSPResponseBody body; //响应体 @XmlAttribute(name="service")
public String getService() {
return service;
} public void setService(String service) {
this.service = service;
} @XmlElement(name="Head") //例如<Head>OK</Head>这样的用XmlElement注释,所以此注释是填充标签之间的内容;而XmlAttribute是填充开始标签中的属性值
public String getHead() {
return head;
} public void setHead(String head) {
this.head = head;
} @XmlElement(name="ERROR")
public BSPError getError() {
return error;
} public void setError(BSPError error) {
this.error = error;
} @XmlElement(name="Body")
public BSPResponseBody getBody() {
return body;
} public void setBody(BSPResponseBody body) {
this.body = body;
} @Override
public String toString() {
return "BSPResponse [service=" + service + ", head=" + head + ", error=" + error + ", body=" + body + "]";
} }
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue; /**
* @ClassName BSPError
* @Description 响应Error元素
* @author
* @Date 2018年4月24日 上午11:43:46
* @version 1.0.0
*/
public class BSPError {
private int code; //错误代码
private String message; //错误详细信息 @XmlAttribute(name="code")
public int getCode() {
return code;
} public void setCode(int code) {
this.code = code;
} @XmlValue //<ERROR code="4001">系统发生数据错误或运行时异常</ERROR>像这样,既有属性值,又有标签内容怎么办呢?就用到XmlValue注释,此注释就是添加内容,不会增加子标签;
public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} @Override
public String toString() {
return "BSPError [code=" + code + ", message=" + message + "]";
} }
import javax.xml.bind.annotation.XmlElement;

/**
* @ClassName BSPResponseBody
* @Description BSP响应体(这里用一句话描述这个类的作用)
* @author 贺雄云
* @Date 2018年4月25日 上午11:41:04
* @version 1.0.0
*/
public class BSPResponseBody {
private BSPOrderResponse orderResponse; //下单接口响应体
private BSPRouteResponse routeResponse; //路由查询接口响应体内容 @XmlElement(name="OrderResponse")
public BSPOrderResponse getOrderResponse() {
return orderResponse;
} public void setOrderResponse(BSPOrderResponse orderResponse) {
this.orderResponse = orderResponse;
} @XmlElement(name="RouteResponse")
public BSPRouteResponse getRouteResponse() {
return routeResponse;
} public void setRouteResponse(BSPRouteResponse routeResponse) {
this.routeResponse = routeResponse;
}
}

注意:我们前面请求接口例子中,请求接口对象是可以用泛型的,可是我网上找了发现xml转换为javabean时用不了泛型,所以我就在响应体BSPResponseBody中写了多个响应体对象,这里有下单和路由查询两个响应体对象,这样我也不用重复写多个响应接口BSPResponse ,一个响应接口对象中有一个BSPResponseBody响应体对象,响应体对象中有多个不同的响应对象,即使要转换的xml中没有此对象也没关系,不过是转换后的java对象中对应的该对象为空而已,不会影响业务代码。

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement; /**
* @ClassName BSPRouteResponse
* @Description 路由查询接口响应元素RouteResponse
* @author
* @Date 2018年4月25日 上午10:37:46
* @version 1.0.0
*/
public class BSPRouteResponse {
private String mailNo; //顺丰运单号
private String orderId; //客户订单号,按客户订单号查询时为必填。按顺丰运单号查询时为空。
private List<RouteResponseRoute> routeResponseRouteList; //子元素 RouteResponse/Route,多个 @XmlAttribute(name="mailno")
public String getMailNo() {
return mailNo;
} public void setMailNo(String mailNo) {
this.mailNo = mailNo;
} @XmlAttribute(name="orderid")
public String getOrderId() {
return orderId;
} public void setOrderId(String orderId) {
this.orderId = orderId;
} @XmlElement(name="Route")
public List<RouteResponseRoute> getRouteResponseRouteList() {
return routeResponseRouteList;
} public void setRouteResponseRouteList(List<RouteResponseRoute> routeResponseRouteList) {
this.routeResponseRouteList = routeResponseRouteList;
} @Override
public String toString() {
return "BSPRouteResponse [mailNo=" + mailNo + ", orderId=" + orderId + ", routeResponseRouteList="
+ routeResponseRouteList + "]";
} }
import java.util.Date;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /**
* @ClassName RouteResponseRoute
* @Description 路由查询接口 响应元素 RouteResponse/Route
* @author
* @Date 2018年4月25日 上午10:50:27
* @version 1.0.0
*/
public class RouteResponseRoute implements Comparable<RouteResponseRoute> {
private Date acceptTime; //路由节点发生的时间,格式:YYYY-MM-DD HH24:MM:SS,示例:2012-7-30 09:30:00。
private String acceptAddress; //路由节点发生的地点
private String remark; //路由节点具体描述
private String opcode; //路由节点操作码 @XmlAttribute(name="accept_time")
@XmlJavaTypeAdapter(JaxbDateSerializer.class) //日期格式的转换,定义了一个JaxbDateSerializer转换类,使用此注解就可以了
public Date getAcceptTime() {
return acceptTime;
} public void setAcceptTime(Date acceptTime) {
this.acceptTime = acceptTime;
} @XmlAttribute(name="accept_address")
public String getAcceptAddress() {
return acceptAddress;
} public void setAcceptAddress(String acceptAddress) {
this.acceptAddress = acceptAddress;
} @XmlAttribute(name="remark")
public String getRemark() {
return remark;
} public void setRemark(String remark) {
this.remark = remark;
} @XmlAttribute(name="opcode")
public String getOpcode() {
return opcode;
} public void setOpcode(String opcode) {
this.opcode = opcode;
} @Override
public String toString() {
return "RouteResponseRoute [acceptTime=" + acceptTime + ", acceptAddress=" + acceptAddress + ", remark="
+ remark + ", opcode=" + opcode + "]";
} @Override
public int compareTo(RouteResponseRoute o) {
long l = this.getAcceptTime().getTime() - o.getAcceptTime().getTime();
if (l > 0) {
return -1;
}else if (l == 0) {
return 0;
}else {
return 1;
}
} }
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter; //日期转化的类
public class JaxbDateSerializer extends XmlAdapter<String, Date> { private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override
public Date unmarshal(String date) throws Exception {
return dateFormat.parse(date);
} @Override
public String marshal(Date date) throws Exception {
return dateFormat.format(date);
} }

3、测试xml转换为java对象(jaxb工具类和前面一样)

public class XMLTest {
public static void main(String[] args) {
try {
BSPResponse response = JaxbXmlUtil.convertToJavaBean("<Response service='RouteService'><Head>OK</Head><Body><RouteResponse mailno='444003077899'><Route accept_time='2015-01-04 10:11:26' accept_address='深圳' remark='已收件' opcode='50'/><Route accept_time='2015-01-05 17:41:50' remark='此件签单返还的单号为 123638813181' opcode='922'/></RouteResponse></Body></Response>", BSPResponse.class);
System.out.println("head:" + response.getHead());
System.out.println("service:" + response.getService());
System.out.println("error:" + response.getError());
System.out.println("osrBody:" + response.getBody().getOrderResponse());
System.out.println("rsrBody:" + response.getBody().getRouteResponse());
System.out.println("RouteResponse/route:" + response.getBody().getRouteResponse().getRouteResponseRouteList());
Date d1 = response.getBody().getRouteResponse().getRouteResponseRouteList().get(0).getAcceptTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sdf.format(d1);
System.out.println(str1);
Date d2 = response.getBody().getRouteResponse().getRouteResponseRouteList().get(1).getAcceptTime();
String str2 = sdf.format(d2);
System.out.println(str2); } catch (Exception e) {
e.printStackTrace();
} }
}

后续用到更复杂jaxb操作的再来补上....

JAXB 专题二(BSP接口实战)的更多相关文章

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  2. 性能测试专题:Locust工具实战之“蝗虫”降世

    阅读全文需5分钟. 1. 前言 在上一篇文章中,我们已经为大家介绍了什么是Locust,具体可参照:性能专题:Locust工具实战之开篇哲学三问,简单来说,Locust 是基于 Python 语言下的 ...

  3. Postman系列三:Postman中post接口实战(上传文件、json请求)

    一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  7. 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  8. 「kuangbin带你飞」专题二十 斜率DP

    layout: post title: 「kuangbin带你飞」专题二十 斜率DP author: "luowentaoaa" catalog: true tags: mathj ...

  9. 「kuangbin带你飞」专题二十二 区间DP

    layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...

随机推荐

  1. 转:大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合

    虽然比较久,但是这套架构已经很成熟了,记录一下 一般数据流向,从“数据采集--数据接入--流失计算--数据输出/存储”<ignore_js_op> 1).数据采集 负责从各节点上实时采集数 ...

  2. 使用Jenkins自动编译我的 java 项目 git maven jenkins

    之前的项目已经将jenkins部署好,现在添加maven项目 准备工作 安装插件 Git plugin Publish Over SSH 全局设置  key: 是 linux服务器的私钥 Global ...

  3. 【CSAPP】一、计算机系统漫游

    一.位+上下文 文本文件 / 二进制文件: 文本文件是只由ASCII码构成的文件 二.从源代码到可执行文件的顺序 源代码 ——> 可执行文件(机器代码)共有四步: 全过程代码 gcc hello ...

  4. 【git】git知识梳理(二):服务器

    (四) 远程仓库通常只是一个裸仓库(bare repository):.git子目录 四种协议:本地传输, SSH, GIT, HTTP, 除了http,均需要在服务器端安装运行git. SSH:SS ...

  5. linux常用开发工具命令行

  6. 微信小程序-富文本解析插件wxParse基础使用及问题解决

    一.插件准备 在github上可以直接下载该插件:https://github.com/icindy/wxParse 二.基本使用 1.将插件导入项目: 将wxParse文件夹放在项目目录下,如图: ...

  7. PS基础教程[6]如何快速制作一寸照片

    一寸照片使我们经常会用到的,很多的证件照都是使用一寸的照片作为存档的.写这个经验也是因为刚刚有网友求助做一寸照片,所以就顺便写个经验.废话不多说了,进入正题,PS基础教程之快速制作一寸的照片. 制作方 ...

  8. Jar包进行反编译,修改后重新打包

    在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的使用说明和源代码,有时有的却不提供源代码,使用 ...

  9. 关于djangoadmin的一个博客

    http://www.cnblogs.com/linxiyue/category/569717.html

  10. onItemLongClick事件的监听

    首先需要implements public class MainActivity extends AppCompatActivity implements OnItemLongClickListene ...