为什么请求响应的过程没有启动拦截器呢?

为什么请求响应的过程没有启动拦截器呢?

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
package com.imooc.resuful.controller;

import com.imooc.resuful.entity.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/resuful")
public class RestfulController {

    @GetMapping("/persons")
    public List<Person> findPersons(){
        List list = new ArrayList();
        Person p1 = new Person();
        p1.setName("lily");
        p1.setAge(23);
        p1.setBirthday(new Date());
        Person p2 = new Person();
        p2.setName("smith");
        p2.setAge(22);
        p2.setBirthday(new Date());
        list.add(p1);
        list.add(p2);
        System.out.println("RestfulController.findPersons()-return list");
        return list;
    }

}
package com.imooc.resuful.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println(request.getRequestURL() + "准备执行");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(request.getRequestURL() + "目标处理成功");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(request.getRequestURL() + "响应内容已产生");
    }
}
<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <context:component-scan base-package="com.imooc"/>
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=utf-8</value>
                        <value>application/json;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <mvc:default-servlet-handler/>
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.imooc.resuful.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>

浏览器成功接收响应:https://img1.sycdn.imooc.com//climg/63ea387e0959e55f28801622.jpg

idea控制台没有打印拦截器三个方法中的内容:https://img1.sycdn.imooc.com//climg/63ea38af095b3f3328781624.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-02-14 10:46:14

同学你好,老师使用同学的代码通过直接访问“http://localhost:8080/resuful/persons”的形式是可以正确在IDEA中输出拦截器语句的。

看到同学截图中会展示client.html的内容,猜测同学访问时不是直接访问URL的。

建议同学补充一下服务器启动之后是如何访问的。

祝学习愉快~

  • 提问者 王小east #1

    1、为什么我这直接访问“http://localhost:8080/resuful/persons”,IDEA中也不会输出拦截器语句呢?https://img1.sycdn.imooc.com//climg/63eb04080994885228740444.jpghttps://img1.sycdn.imooc.com//climg/63eb0422099bafe928781624.jpg


    2、之前是通过client.html向esuful/persons发送get请求,和直接访问“http://localhost:8080/resuful/persons”,效果应该是一样的吧。https://img1.sycdn.imooc.com//climg/63eb04a3095ebe4828781624.jpg

    2023-02-14 11:48:57
  • 好帮手慕小蓝 回复 提问者 王小east #2

    同学你好,老师这里测试之后,也是可以正常输出拦截器内容的。

    建议同学下载课程源码,使用课程源码的环境再测试一下。

    祝学习愉快~

    2023-02-14 14:06:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师