文档章节

接口返回html页面展示在浏览器

o
 osc_zoa3moe9
发布于 2019/12/07 22:00
字数 561
阅读 39
收藏 0

精选30+云产品,助力企业轻松上云!>>>

近期做接口对接时,对方直接返回整个html页面,把我整懵了,特此记录下。

网上有很多人提出采用 中转页面 的方式,本文另辟蹊径,采取后端方式解决。

1. 导包

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.12.1</version>
</dependency>

 

2. 上代码

package cn.sd.service.impl;

import cn.sd.service.SpeedServiceI;
import cn.sd.utils.OutKey;
import cn.sd.utils.WxApi;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 清风明月
 * @description
 * @date 2019/12/7 18:59
 */
@Service
public class SpeedServiceImpl implements SpeedServiceI {
    private static final Logger logger = LoggerFactory.getLogger(SpeedServiceImpl.class);
    /**
     * 某公众号的appid
     */
    private String appId = "***********";
    /**
     * 约定的密钥
     */
    private String clearly = "###########";

    @Override
    public void showHtmlPage(String openId, String phone, String card, HttpServletResponse response) {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer;
        try {
            writer = response.getWriter();
        } catch (IOException e) {
            writer = new PrintWriter(System.out);
            logger.error("IO异常:", e);
        }

        Map userInfo = WxApi.getUserInfo(appId, openId);
        logger.info("关注用户信息:" + userInfo);

        Map bindUserInfo = WxApi.getBindingMobileEntity(appId, openId);
        logger.info("绑定用户信息:" + bindUserInfo);

        if (userInfo == null || bindUserInfo == null || userInfo.isEmpty() || bindUserInfo.isEmpty()) {
            logger.info("请关注【某公众号】并绑定手机号后访问");
            writer.println("请关注【某公众号】并绑定手机号后访问");
        } else {
            //1 关注
            String subscribe = String.valueOf(userInfo.get("subscribe"));
            //Y 绑定
            String bindStatus = (String) bindUserInfo.get("bindingStatus");
            logger.info("bindStatus:" + bindStatus + " && subscribe:" + subscribe);

            if ("Y".equals(bindStatus) && "1".equals(subscribe)) {
                //手机号码加密
                String nbr = OutKey.encrypt(phone, clearly);
                //中文加密
                String area = OutKey.encrypt(card, clearly);
                String speedUrl = "http://***.**.***.**:****/***?nbr={nbr}&area={area}&clearly={clearly}";
                Map<String, String> map = new HashMap<>(4);
                map.put("nbr", nbr);
                map.put("area", area);
                map.put("clearly", clearly);
                logger.info("map:{}", map);
                RestTemplate restTemplate = new RestTemplate();
                String html = restTemplate.getForObject(speedUrl, String.class, map);
                Document document = Jsoup.parse(html);
                logger.info("document:{}", document);
                writer.println(document.outerHtml());
            } else {
                logger.info("请绑定手机号后访问");
                writer.println("请绑定手机号后访问");
            }
        }
        writer.close();
    }
}

不加 response.setContentType("text/html;charset=utf-8"); 的话,中文会变成???

 

3. 配置文件

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--  加载静态资源  -->
    <mvc:annotation-driven />
    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/images/**" location="/images/" />
    <mvc:resources mapping="/js/**" location="/js/" />

    <!-- 包扫描 -->
    <context:component-scan base-package="cn.sd.controller, cn.sd.service"/>

</beans>

这里没打算说的,但当时自己忘记加静态资源配置了,导致样式未显示出来。(样式、图片等静态资源找对方要)

 

至此,完成。

除暴安良我心愿,一身正气荡人间

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
客户端相关知识学习(五)之什么是webView

webview是什么?作用是什么?和浏览器有什么关系? Android系统中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件也就是说WebView是一个基于webkit引擎、可以解析...

osc_9ow0lf0i
2019/09/20
2
0
webview的简单介绍和手写一个H5套壳的webview

1.webview是什么?作用是什么?和浏览器有什么关系? Webview 是一个基于webkit引擎,可以解析DOM 元素,展示html页面的控件,它和浏览器展示页面的原理是相同的,所以可以把它当做浏览器看待...

BothEyes1993
2019/11/16
0
0
一个PHP文件搞定微信H5支付

/ 更新于 2018-07-02 / 8 条评论 过年期间也坚持要撸码啊接着给博客除草,在这个小除夕是情人节的一天,祝大家新年快乐,情人节能够顺利脱单~~~ 回归正题,这篇文章介绍一下微信H5支付,以及...

osc_xl85dc6p
2018/07/04
21
0
HTML5 Geolocation API和Google Maps API结合实现路线导航

HTML5提供了地理位置定位功能(Geolocation API),能确定用户位置,我们可以借助HTML5的该特性开发基于地理位置信息的应用。本文结合实例给大家分享如何使用HTML5,借助百度、谷歌地图接口来...

iNiL0119
2016/09/14
241
0
web前端学习笔记(python)(一)

瞎JB搞】感觉自己全栈了,又要把数据库里面的内容,以web形式展示出来,并支持数据操作。占了好多坑。。。。。慢慢填(主要参考廖雪峰的官网,不懂的再百度) 一、web概念   Client/Server...

osc_w6ajhfm8
2018/07/25
2
0

没有更多内容

加载失败,请刷新页面

加载更多

【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!

写在前面 在《【高并发】面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!》一文中,我们主要介绍了如何使用Nginx进行限流,以避免系统被大流量压垮。除此之外,Nginx还有很多...

osc_6l5fg87g
22分钟前
9
0
一小时完成后台开发:DjangoRestFramework开发实践

DjangoRestFramework开发实践 在这之前我写过一篇关于Django与Drf快速开发实践的博客,Django快速开发实践:Drf框架和xadmin配置指北,粗略说了一下Drf配置和基本使用,不过里面只是涉及到最...

osc_z2ru77w0
23分钟前
14
0
数据载入、存储及文件格式知识图谱-《利用Python进行数据分析》

所有内容整理自《利用Python进行数据分析》,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片。

osc_161difcz
25分钟前
8
0
Java异常

一、异常? java系统中将java.lang.Throwable类作为异常的最根类 [java.lang.Throwable是所有异常或错误的顶级类,可以处理任何异常] * java.lang.Throwable * |-----java.lang.Error:一般...

osc_o44vh5qb
26分钟前
23
0
(1)Linux系统中到底应该怎么理解系统的平均负载

每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。 $ uptime...

osc_i5oyb1xr
27分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部