SpringMVC+Ajax+Maven获取JSON数据并解析

链接:https://pan.baidu.com/s/1GxdnvIbdJBGOnU3ECaPYXA
提取码:2j48
gitee:https://gitee.com/Mylife0506/spring-mvc_-ajax_-weather.git

SpringMVC+Ajax+Maven获取JSON数据并解析

例:
在这里插入图片描述

java代码:

1.构建一个客户端

2.构建一个请求对象

3.发送请求,服务器会响应一个JSON的字符串

4.解析 jsonStr–>CityBean? JSON的帮助类:Jackson

@Controller
public class weatherApp {
    @RequestMapping(value ="/json", method = RequestMethod.POST)
    @ResponseBody//将服务器返回的对象装换为JSON对象响应回去
    public List<CityBean.ResultBeanX.ResultBean> Busjosn(String city) throws IOException {
        //1.构建一个客户端
        CloseableHttpClient client = HttpClients.createDefault();
        //2.构建一个请求对象
        String appkey = "a963edb6227421b3ee3e6bc482efcca6";
        String uri = "https://way.jd.com/jisuapi/weather?";
        HttpGet doGet = new HttpGet(uri + "city=" + city + "&appkey=" + appkey);
        //3.发送请求,服务器会响应一个JSON的字符串
        CloseableHttpResponse response = client.execute(doGet);
        //response.getEntity();获取响应中的一个实体
        String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
        //4.解析 jsonStr-->CityBean? JSON的帮助类:Jackson
        ObjectMapper mapper = new ObjectMapper();
        CityBean cityBean = mapper.readValue(jsonStr, CityBean.class);
        CityBean.ResultBeanX.ResultBean c = cityBean.getResult().getResult();
        List<CityBean.ResultBeanX.ResultBean> list = new ArrayList<CityBean.ResultBeanX.ResultBean>();
        list.add(c);
        return list;//由于使用@ResponseBody注解,这里会将s以JSON格式的字符串返回,十分方便
    }
}

maven

<dependencies>
    <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
    <exclusions>
    <exclusion>
    <artifactId>commons-logging</artifactId>
    <groupId>commons-logging</groupId>
    </exclusion>
    </exclusions>
    </dependency>
    <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
    </dependency>

    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
    </dependency>
    <!-- SpringMVC -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.1</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    </dependency>

    <!-- ServletAPI -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
    </dependency>
</dependencies>

DispatcherServlet-servlet.xml


    <!--开启注解扫描-->
    <context:component-scan base-package="cn.pdsu"/>
    <!--开放静态资源访问-->
    <mvc:default-servlet-handler/>
    <!--开启注解驱动-->
    <mvc:annotation-driven>
        <!--Json格式乱码处理方式-->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">

                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>

web.xml


    <!--配置编码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--处理HiddenHttpMethodFilter-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置springMVC的前端控制器DispatcherServlet-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
        <!--meta 单标签 用来引入或声明一些内容-->
    <meta charset="UTF-8">

    <!--viewport 视口-->
    <!--width 设置视口宽度-->
    <!--user-scalable 网页是否可以被缩放-->
    <!--initial-scale 网页被加载时,初始的比例-->
    <!--maximum-scale 网页最大的放大比例-->
    <!--minimum-scale 网页最小的缩放比例-->
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>天气预报</title>
    <style>
        html{
            height: 100%;
        }
        body{
            /*边界看宽度默认为8,在这里初始值设为零*/
            margin: 0;

            /*高度100%,整个界面*/
            height: 100%;

            /*display: inline-block 转换为行内块元素*/
            /*display: flex 将该标签作为弹性布局的容器*/
            display: flex;

            /*指定容器内的item布局方向*/
            /*row 容器内的item按照x轴(主轴方向布局)*/
            /*column 容器内的item按照y轴(交叉轴)方向布局*/
            /*row-reverse 容器内的item按照x轴反向布局*/
            /*column-reserve 容器内的item按照y轴反向布局*/
            flex-direction: column;

            /*文本居中*/
            text-align: center;

            /*设置背景图片*/
            /*rgb() red green blue  取值0~255*/
            /*rgba() red green blue alpha(取0~1)*/
            /*设置背景色从rgb(14,105,189)到red值从上到下渐变*/
          

            /*主轴项目item的布局方式*/
            justify-content: space-between;

            /*交叉轴的项目item布局方式*/
            /*align-items: ;*/
        }
        header{
            /*字体大小*/
            font-size: 30px;
        }
        img{
            /*width: 设置图片显示宽度,高度会自适应*/
            width: 80px;
        }
        footer{
            /*display: flex 将该标签作为弹性布局的容器*/
            display: flex;
            /*设置item的布局方式*/
            justify-content: space-between;
        }
        footer section{
            /*宽度占比33%*/
            width: 33%;
            border-right: 1px black solid;
        }
    </style>
</head>
<body background="bg3.jpg" >
<script src="${pageContext.request.contextPath}/statics/js/jQuery.js"></script>
<script>
    $(function () {
    	$("#btn").click(function () {
        	var city=$("#city").val();
        	var data={
        		"city":city
        	};
        	var city = "";
        	var weather = "";
        	var winddirect = ""
        	var a = "";
        	var index1 = "";
        	var index2 = "";
        	var index3 = "";
        	var daily1 = "";
        	var daily2 = "";
        	var daily3 = "";
        	var	aqi = "";
        	var	weather2 = "";
            $.post("${pageContext.request.contextPath}/json",data,function (data) {
                console.log(data);
                var html = "";
                var html2= "";
                $.each(data,function(k,v){            	
                	city = city+v.city;
                	weather = weather+v.weather;   
                	winddirect = winddirect+v.winddirect;
                  $.each(data[k], function (k, v) {
                        if(k == 'index'){
                             $.each(v, function (k, object) {
                            	index1=object.iname;
                            	index2=object.ivalue;
                            	index3=object.detail;
                            	  html += "<tr>" +
                                 "<td>" + index1 + "</td>" +
                                 "<td>" + index2 + "</td>" +
                                 "<td>" + index3 + "</td>" + "</tr>" ;
                            	   $("#content").html(html);
                            }) 
                        	
                        }else if(k == 'aqi'){           
                         		 aqi=aqi+v.quality; 
                        } else if(k == 'daily'){
                            $.each(v, function (k, object) {
                            	/* daily = daily+object.date+object.week+object.night; */
                            	daily1=object.date;
                            	daily2=object.week;
                            	
                            	  $.each(v[k], function (k, v) {
                            		 if(k == 'night'){           
                            		 a = v.weather;
                                     } 
                            	 })                             	
                            	  html2 += "<section>" +
                                 "<p>" + daily1 + "<p>" +
                                 "<p>" + daily2 + "<p>" +     
                                 "<p>" + a + "<p>" + " </section>" ;
                            	  $("#footer1").html(html2);
                            })
                        } 
                    })       
                })
                $("#winddirect").text(winddirect);
                $("#aqi").text(aqi);
                $("#city1").text(city);
                $("#weather").text(weather);
            })
        })
    })
</script>
<div align = "left">
城市名称:<input type="text" id="city"  >
<input type="button" id="btn" value="查询">
</div>

<header id = "city1">郑州市</header> 

<!--main 块元素 标记网页中的主要内容-->
<main >
    <h2 id="aqi">轻度污染</h2>
    <h3 id = "weather">晴转多云</h3>
    <p id = "winddirect">东风微风</p>
</main>
<div>
<table width="80%" align="center" border ="1px" cellpadding = "8px" cellspacing = "0px">

<tr>
<th>相关指数</th>
<th>天气</th>
<th>建议</th>
</tr>
    <tbody id="content">
    </tbody>
</table>
</div>
<!--footer 网页中的尾部内容-->
<footer id="footer1">
    <!--section 组件、模块, 块元素-->
    <!-- <section>
        <p>周三</p>
        <p>27~30</p>

        <p>阴转小雨</p>
        <p>南风微风</p>
    </section> -->
    
</footer>

</body>
</html>
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mylife0506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值