当前位置: 首页 > news >正文

哪里有做网站的单位搜索关键字搜索到网站

哪里有做网站的单位,搜索关键字搜索到网站,wordpress 小程序源码,女生零基础可以学什么技术文章目录 数据请求格式application/json接收发送 multipart/form-data接收发送 application/x-www-form-urlencoded接收发送 text/xml接收发送 Request请求中各个数据载体获取方法HeaderParameterInputStreamAttribute 二次封装HttpServletRequest参考 验签与加密 日常开发中我们经常会对接各种各样的第三方平台常常需要对接口接入的数据参数进行处理比如验签解密数据转换数据二次封装等情况本文总结了一些常见的数据处理案例基本满足日常所见的各种情况以供学习。POST 一般用来向服务端提交数据本文主要讨论 POST 请求数据的几种方式。 数据请求格式 application/json Method只支持POST客户端设置请求头参数“Content-type: application/json”方法参数可以对象构成加RequestBody 注解前缀否则不能接收到文件上传可以通过转换成base64参数 接收 使用Postman模拟发送 接收数据 PostMapping( /outbound)public String createOutboundOrderApollo(RequestBody OutboundCreateOrderDTO createOrderDTO) {return JSON.toJSONString(createOrderDTO);}如果需要在请求头中添加一些自己的数据需要从HttpServletRequest中获取请求数据进行二次封装 接收数据 PostMapping( /test)public CainiaoR test(HttpServletRequest request) {// 二次封装requestCustomRequestWrapper requestWrapper new CustomRequestWrapper(request);return CainiaoR.success();}需要注意的是Body请求的数据在InputStream中获取 发送 try {String url 推送消息url;// 请求参数json字符串格式如{\name\:\张三\} 可通过构建对象后再转换成json字符串JSONObject.toJSONString(obj)String content 请求参数json字符串;HttpHeaders requestHeaders new HttpHeaders();requestHeaders.setContentType(MediaType.APPLICATION_JSON);requestHeaders.add(Content-Encoding, UTF-8);HttpEntityString entity new HttpEntity(content, requestHeaders);// 调用远程接口:httpClient restTemplate 等都可以使用具体看个人习惯。ResponseEntity response restTemplate.postForEntity(url, entity, String.class);JSONObject jsonObject JSONObject.parseObject(response.getBody().toString());if (jsonObject.containsKey(code) jsonObject.getString(code).equals(SUCCESS)) {log.info(推送成功);} } catch (Exception e) {log.error(e.getMessage()); }multipart/form-data 只支持POST请求客户端设置请求头参数“Content-type: multipart/form-data”http请求中的multipart/form-data,它会将表单的数据处理为一条消息以标签为单元用分隔符分开。所以multipart/form-data既可以上传文件也可以上传键值对它采用了键值对的方式所以可以上传多个文件。在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。特别在文件上载时所使用的编码类型应当是“multipart/form-data”它既可以发送文本数据也支持二进制数据上载。所以大数据传输时一般选择“multipart/form-data”。属性设置为multipart/form-data并且有至少一个input的type属性为file时浏览器提交这个form时会在请求头部的Content-Type中自动添加boundary属性。 接收 使用Postman模拟发送 接收数据 // 当请求参数有上传文件3个及以下请求参数 PostMapping(/test) public void test(String name, String id, MultipartFile file){log.info(name:{}, id:{}, file: {}, name, id, file); }// 当请求参数有上传文件3个以上请求参数封装成请求对象不能加RequestBody注解 PostMapping(/test) public void test(RequestDto reqDto){log.info(name:{}, id:{}, file: {}, reqDto.getName(), reqDto.getIdcard(), reqDto.getFile()); }发送 以post方式调用第三方接口,以form-data 形式 发送 MultipartFile 文件数据 try {// 需要发送的文件流MultipartFile multipartFile null;String url 推送消息url;// getStreamAsString 见 InputStream 提取String content getStreamAsString(multipartFile.getInputStream());HttpHeaders requestHeaders new HttpHeaders();requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);requestHeaders.add(Content-Encoding, UTF-8);HttpEntityString entity new HttpEntity(content, requestHeaders);// 调用远程接口:httpClient restTemplate 等都可以使用具体看个人习惯。ResponseEntity response restTemplate.postForEntity(url, entity, String.class);JSONObject jsonObject JSONObject.parseObject(response.getBody().toString());if (jsonObject.containsKey(code) jsonObject.getString(code).equals(SUCCESS)) {log.info(推送成功);} } catch (Exception e) {log.error(e.getMessage()); }application/x-www-form-urlencoded 当action为get时候浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串name1value1name2value2…然后把这个字串append到url后面用?分割加载这个新的url。 当action为post时候浏览器把form数据封装到http body中然后发送到server。 接收 请求参数不含MultlpartFile类型时可同时支持 GET和POST上传文件只支持POST包括MutipleFile和Base64字符串方法参数可以对象构成不能加RequestBody注解否则不能接收到使用Postman模拟发送 PostMapping( /test) public void test(String name, String id){log.info(name:{}, id:{}, name, id); }PostMapping(/test) public void test(RequestDto reqDto){log.info(name:{}, id:{}, file: {}, reqDto.getName(), reqDto.getIdcard(), reqDto.getFile()); }如果需要在请求头中添加一些自己的数据需要从HttpServletRequest中获取请求数据进行二次封装 需要注意的是Body请求的数据在Parameter中获取 发送 public void test() {try {// params 需要发送的数据MapString, String params new HashMap();String url 推送消息url;String content buildQuery(params, UTF-8);;HttpHeaders requestHeaders new HttpHeaders();requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);requestHeaders.add(Content-Encoding, UTF-8);HttpEntityString entity new HttpEntity(content, requestHeaders);// 调用远程接口:httpClient restTemplate 等都可以使用具体看个人习惯。ResponseEntity response restTemplate.postForEntity(url, entity, String.class);JSONObject jsonObject JSONObject.parseObject(response.getBody().toString());if (jsonObject.containsKey(code) jsonObject.getString(code).equals(SUCCESS)) {log.info(推送成功);}} catch (Exception e) {log.error(e.getMessage());} }public static String buildQuery(MapString, String params, String charset) throws IOException {if (params null || params.isEmpty()) {return null;}StringBuilder query new StringBuilder();SetMap.EntryString, String entries params.entrySet();boolean hasParam false;for (Map.EntryString, String entry : entries) {String name entry.getKey();String value entry.getValue();// 忽略参数名或参数值为空的参数if (StringUtils.areNotEmpty(name, value)) {if (hasParam) {query.append();} else {hasParam true;}query.append(name).append().append(URLEncoder.encode(value, charset));}}return query.toString(); }text/xml 该种方式主要用来提交XML格式的数据。 接收 InputStream就是Java标准库提供的最基本的输入流。HttpServletRequest中InputStream只能读取一次如果想要二次读取就会报错。 因此需要能够重复读取 InputStream 的方法。使用Postman模拟发送 private final byte[] body; private String bodyString;SneakyThrows private byte[] initInputStream(HttpServletRequest request) {// getStreamAsString 见 InputStream 提取this.bodyString getStreamAsString(request.getInputStream());return bodyString.getBytes(StandardCharsets.UTF_8); }发送 与其他格式一样将数据转为String传输。 Request请求中各个数据载体获取方法 Header 请求标头是一种 HTTP 标头它可在 HTTP 请求中使用其提供有关请求上下文的信息以便服务器可以定制响应。请求头由key/value对组成每行为一对key和value之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。 // 获取请求头信息 private static MapString, String initHeaders(HttpServletRequest request) {MapString, String headers new HashMap();EnumerationString headerNames request.getHeaderNames();while (headerNames.hasMoreElements()) {String headerName headerNames.nextElement();String header request.getHeader(headerName);headers.put(headerName, header);}return headers; }Parameter 参数parameter是从客户端浏览器中由用户提供的若是GET方法是从URL中提供的若是POST方法是从请求体request body中提供的request.getParameter()取得是通过容器的实现来取得通过类似post、get等方式传入的数据。request.getParameter()方法传递的数据会从web客户端传到web服务器端代表HTTP请求数据。 // 获取 private MapString, String[] initParameters(HttpServletRequest request) {MapString, String[] parameterMap new HashMap();EnumerationString parameterNames request.getParameterNames();while (parameterNames.hasMoreElements()) {String paramName parameterNames.nextElement();String[] parameterValues request.getParameterValues(paramName);parameterMap.put(paramName, parameterValues);}return parameterMap; }InputStream private static String getStreamAsString(InputStream stream) throws IOException {try {Reader reader new InputStreamReader(stream, StandardCharsets.UTF_8);StringBuilder response new StringBuilder();final char[] buff new char[1024];int read 0;while ((read reader.read(buff)) 0) {response.append(buff, 0, read);}return response.toString();} finally {if (stream ! null) {stream.close();}} }Attribute request.setAttribute()和getAttribute()只是在web容器内部流转仅仅是请求处理阶段。属性attribute是服务器端的组件JSP或者Servlet利用requst.setAttribute设置的属性attribute的值既可以读取亦可以修改读取可以使用request.getAttribute(),设置可使用request.setAttribute(); 二次封装HttpServletRequest参考 /** * Author: carroll * Date: 2023-12-22 * Since: 1.0** 自定义HttpServletRequest 实现参数重复读取请求头写入请求头获取等功能* 满足各种平台各种数据数据格式传输和租户信息配置 */ public class CustomRequestWrapper extends HttpServletRequestWrapper {private final MapString, String[] params;//定义参数集合private MapString, String headerMap;private final RedisUtils redisUtils;// 将request 里面的东西 缓存到这个数组里面private final byte[] body;private String bodyString;public CustomRequestWrapper(HttpServletRequest request, RedisUtils redisUtils) {super(request);this.params initParameters(request);this.headerMap initHeaders(request);this.redisUtils redisUtils;this.body initInputStream(request);getRequestOpenid();}SneakyThrowsprivate byte[] initInputStream(HttpServletRequest request) {this.bodyString getStreamAsString(request.getInputStream());return bodyString.getBytes(StandardCharsets.UTF_8);}private void getRequestOpenid() {String openid ;// 可以获取外部推送各种接口请求头中的数据 然后将对应的货主等信息放到请求头中String partner_code getParameter(partner_code);if (CharSequenceUtil.isNotBlank(partner_code)) {openid partner_code;}Object obj redisUtils.get(GlobalConstants.OPENID openid);if (Objects.isNull(obj)) {throw new BizException(未获取到有效请求头数据);}QiMenOwnerCache ownerCache JSONUtil.toBean(obj.toString(), QiMenOwnerCache.class);initOwnerInfo(String.valueOf(ownerCache.getTenantId()), String.valueOf(ownerCache.getWarehouseId()), String.valueOf(ownerCache.getOwnerId()));}private MapString, String[] initParameters(HttpServletRequest request) {MapString, String[] parameterMap new HashMap();EnumerationString parameterNames request.getParameterNames();while (parameterNames.hasMoreElements()) {String paramName parameterNames.nextElement();String[] parameterValues request.getParameterValues(paramName);parameterMap.put(paramName, parameterValues);}return parameterMap;}public void initOwnerInfo(String tenantId,String warehouseId,String ownerId) {headerMap.put(SecurityConstants.TENANT_ID_HEADER, tenantId);headerMap.put(SecurityConstants.WAREHOUSE_ID_HEADER, warehouseId);headerMap.put(SecurityConstants.OWNER_ID_HEADER, ownerId);}private static MapString, String initHeaders(HttpServletRequest request) {MapString, String headers new HashMap();EnumerationString headerNames request.getHeaderNames();while (headerNames.hasMoreElements()) {String headerName headerNames.nextElement();String header request.getHeader(headerName);headers.put(headerName, header);}return headers;}Overridepublic String getParameter(String name) {String[] vs params.get(name);if (vs null || vs.length 1)return null;return vs[0];}Overridepublic EnumerationString getParameterNames() {return Collections.enumeration(params.keySet());}Overridepublic String[] getParameterValues(String name) {String[] vs params.get(name);if (vs null || vs.length 1)return new String[0];return vs;}Overridepublic String getHeader(String name) {return this.headerMap.getOrDefault(name, headerMap.get(name.toLowerCase()));}Overridepublic EnumerationString getHeaderNames() {return Collections.enumeration(this.headerMap.keySet());}public String getBodyString() {return this.bodyString;}Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(getInputStream()));}Overridepublic ServletInputStream getInputStream() {final ByteArrayInputStream innerBAIS new ByteArrayInputStream(body);return new ServletInputStream() {Overridepublic boolean isFinished() {return false;}Overridepublic boolean isReady() {return false;}Overridepublic void setReadListener(ReadListener readListener) {}Overridepublic int read() {return innerBAIS.read();}};}private static String getStreamAsString(InputStream stream) throws IOException {try {Reader reader new InputStreamReader(stream, StandardCharsets.UTF_8);StringBuilder response new StringBuilder();final char[] buff new char[1024];int read 0;while ((read reader.read(buff)) 0) {response.append(buff, 0, read);}return response.toString();} finally {if (stream ! null) {stream.close();}}}}验签与加密 后续补充… 你知道的越多你不知道的越多。
http://www.zqtcl.cn/news/96868/

相关文章:

  • 有哪些做兼职的设计网站有哪些工作可以用asp做哪些网站
  • 装修网站推广方案东莞网站建设0086
  • 知名营销网站开发高端网站建设如何收费
  • 佛山网站建设邓先生沈阳做网站找黑酷科技
  • 网站建设 排名下拉请教个人主页网站怎么做啊
  • 揭阳网站制作教程安阳seo公司
  • 网站运营管理教材wordpress 评论框插件
  • 免费做手机网站有哪些网页怎么制作链接
  • 浙江省建设工程质量协会网站wordpress只在首页设置关键词
  • 网站开发选题申请理由东莞网站建议
  • 阿里巴巴国际站运营培训商务网站的建设步骤
  • 有哪几个平台做网站专业的网站建设流程
  • 网站的回到顶部怎么做字体艺术设计在线生成
  • 物流营销型网站案例分析渭南专业做网站
  • 织梦音乐网站接推广任务的平台
  • 网站建设设计团队平面设计主要做什么ui
  • 站长工具seo综合查询广告和京东一样的网站
  • 柳州做网站的企业做黑彩网站
  • 商城网站开发那家好网站建设知识平台
  • 莱州网站定制flash网站cms
  • 经营范围里的网站建设直播系统程序
  • 58同城类似的网站开发wordpress 地方生活
  • wordpress 七牛ossseo系统
  • 郑州做网站 熊掌号太原今天最新通知
  • 文章网站如何与压力做足球比赛直播间在线观看
  • 越秀网站建设优化呼和浩特住房和城乡建设部网站
  • 河南省路桥建设集团网站建网站公司郑州
  • 海沧做网站深圳外贸招聘
  • 网站建设置顶多少钱翻译成英文
  • 柳州正规网站制作公司哪家好怎么学好网站建设