最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Spring Boot快速入門之(十三): 攔截器

2020-08-31 12:34 作者:信碼由韁  | 我要投稿

【注】本文譯自: https://www.tutorialspoint.com/spring_boot/spring_boot_interceptor.htm

? ? ? ? 在以下兩種情況下,可以在?Spring Boot 中使用攔截器來執(zhí)行操作:

    • 發(fā)送請(qǐng)求到控制器之前

    • 發(fā)送響應(yīng)到客戶端之前

? ? ? ?譬如,可以使用攔截器在發(fā)送請(qǐng)求到控制器之前添加請(qǐng)求頭,并在發(fā)送響應(yīng)到客戶端之前添加響應(yīng)頭。

? ? ? ?要用攔截器,你需要?jiǎng)?chuàng)建?@Component?類,并且要實(shí)現(xiàn)?HandlerInterceptor?接口。

? ? ? ?下面是使用攔截器要知道的三個(gè)方法:

    • preHandle()?方法:用于在發(fā)送請(qǐng)求到控制器之前執(zhí)行操作。這個(gè)方法應(yīng)當(dāng)返回 true 以響應(yīng)客戶端。

    • postHandle()?方法:用于在發(fā)送響應(yīng)到客戶端之前執(zhí)行操作。

    • afterCompletion()?方法: 用于在請(qǐng)求和響應(yīng)完成之后執(zhí)行操作。

? ? ? ?觀察以下代碼以加深理解:

@Component

public class ProductServiceInterceptor implements HandlerInterceptor {

???@Override

???public boolean preHandle(

??????HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

??????

??????return true;

???}

???@Override

???public void postHandle(

??????HttpServletRequest request, HttpServletResponse response, Object handler,

??????ModelAndView modelAndView) throws Exception {}

???

???@Override

???public void afterCompletion(HttpServletRequest request, HttpServletResponse response,

??????Object handler, Exception exception) throws Exception {}

}

? ? ? ?還要通過?WebMvcConfigurerAdapter?用?InterceptorRegistry?注冊(cè)這個(gè)攔截器:

@Component

public class ProductServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {

???@Autowired

???ProductServiceInterceptor productServiceInterceptor;


???@Override

???public void addInterceptors(InterceptorRegistry registry) {

??????registry.addInterceptor(productServiceInterceptor);

???}

}

? ? ? ?在下面給出的示例中,我們將要使用后面給出的?GET products API:

? ? ? ?Interceptor 類文件 ProductServiceInterceptor.java 如下所示:

package com.tutorialspoint.demo.interceptor;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.stereotype.Component;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;


@Component

public class ProductServiceInterceptor implements HandlerInterceptor {

???@Override

???public boolean preHandle

??????(HttpServletRequest request, HttpServletResponse response, Object handler)

??????throws Exception {

??????

??????System.out.println("Pre Handle method is Calling");

??????return true;

???}

???@Override

???public void postHandle(HttpServletRequest request, HttpServletResponse response,

??????Object handler, ModelAndView modelAndView) throws Exception {

??????

??????System.out.println("Post Handle method is Calling");

???}

???@Override

???public void afterCompletion

??????(HttpServletRequest request, HttpServletResponse response, Object

??????handler, Exception exception) throws Exception {

??????

??????System.out.println("Request and Response is completed");

???}

}

? ? ? ? Application Configuration 類文件把攔截器注冊(cè)到 Interceptor Registry中,ProductServiceInterceptorAppConfig.java 文件如下:

package com.tutorialspoint.demo.interceptor;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;


@Component

public class ProductServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {

???@Autowired

???ProductServiceInterceptor productServiceInterceptor;


???@Override

???public void addInterceptors(InterceptorRegistry registry) {

??????registry.addInterceptor(productServiceInterceptor);

???}

}

? ? ? Controller 類文件 ProductServiceController.java 如下:

package com.tutorialspoint.demo.controller;


import java.util.HashMap;

import java.util.Map;


import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import com.tutorialspoint.demo.exception.ProductNotfoundException;

import com.tutorialspoint.demo.model.Product;


@RestController

public class ProductServiceController {

???private static Map<String, Product> productRepo = new HashMap<>();???

???static {??????

??????Product honey = new Product();

??????honey.setId("1");

??????honey.setName("Honey");

??????productRepo.put(honey.getId(), honey);??????

??????Product almond = new Product();

??????almond.setId("2");

??????almond.setName("Almond");

??????productRepo.put(almond.getId(), almond);??????

???}

???@RequestMapping(value = "/products")

???public ResponseEntity<Object> getProduct() {

??????return new ResponseEntity<>(productRepo.values(), HttpStatus.OK);

???}

}

? ? ? ?POJO 類文件 Product.java 如下:

package com.tutorialspoint.demo.model;


public class Product {

???private String id;

???private String name;


???public String getId() {

??????return id;

???}

???public void setId(String id) {

??????this.id = id;

???}

???public String getName() {

??????return name;

???}

???public void setName(String name) {

??????this.name = name;

???}

}

? ? ? ?主?Spring Boot 應(yīng)用類文件?DemoApplication.java?如下所示:

package com.tutorialspoint.demo;


import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication

public class DemoApplication {

???public static void main(String[] args) {

??????SpringApplication.run(DemoApplication.class, args);???

???}

}

? ? ? ?Maven build –?pom.xml?文件在此:

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

<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "

???http://www.w3.org/2001/XMLSchema-instance"

???xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0

???http://maven.apache.org/xsd/maven-4.0.0.xsd">

???

???<modelVersion>4.0.0</modelVersion>

???<groupId>com.tutorialspoint</groupId>

???<artifactId>demo</artifactId>

???<version>0.0.1-SNAPSHOT</version>

???<packaging>jar</packaging>

???<name>demo</name>

???<description>Demo project for Spring Boot</description>


???<parent>

??????<groupId>org.springframework.boot</groupId>

??????<artifactId>spring-boot-starter-parent</artifactId>

??????<version>1.5.8.RELEASE</version>

??????<relativePath/>

???</parent>


???<properties>

??????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

??????<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

??????<java.version>1.8</java.version>

???</properties>


???<dependencies>

??????<dependency>

?????????<groupId>org.springframework.boot</groupId>

?????????<artifactId>spring-boot-starter-web</artifactId>

??????</dependency>


??????<dependency>

?????????<groupId>org.springframework.boot</groupId>

?????????<artifactId>spring-boot-starter-test</artifactId>

?????????<scope>test</scope>

??????</dependency>

???</dependencies>


???<build>

??????<plugins>

?????????<plugin>

????????????<groupId>org.springframework.boot</groupId>

????????????<artifactId>spring-boot-maven-plugin</artifactId>

?????????</plugin>

??????</plugins>

???</build>

???

</project>

? ? ? Gradle Build?build.gradle?文件在此:

buildscript {

???ext {

??????springBootVersion = '1.5.8.RELEASE'

???}

???repositories {

??????mavenCentral()

???}

???dependencies {

??????classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

???}

}

apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8


repositories {

???mavenCentral()

}

dependencies {

???compile('org.springframework.boot:spring-boot-starter-web')

???testCompile('org.springframework.boot:spring-boot-starter-test')

}

? ? ? 你可以使用下面的 Maven 或 Gradle 命令創(chuàng)建可執(zhí)行的?JAR 文件,運(yùn)行 Spring Boot 應(yīng)用:

? ? ? ?對(duì)于 Maven,使用以下命令:

mvn clean install

? ? ? ?在 “BUILD SUCCESS” 之后,你可以在 target 目錄下找到 JAR 文件:

? ? ? 對(duì)于?Gradle,使用以下命令:

gradle clean build

? ? ? ?在 “BUILD SUCCESSFUL” 之后,你可以在 build/libs 目錄下找到?JAR 文件:

? ? ? ?可以使用以下命令運(yùn)行 JAR 文件:

java –jar <JARFILE>

? ? ? ?此時(shí),應(yīng)用已經(jīng)在 Tomcat 8080?端口啟動(dòng)了,如下所示:

? ? ? ?在?POSTMAN 應(yīng)用中單擊以下?URL,你可以看到下面的結(jié)果:

GET API:?http://localhost:8080/products

? ? ? ?在控制臺(tái)窗口,你可以看到加在攔截器中的?System.out.println 打印出來的結(jié)果,截屏如下:


Spring Boot快速入門之(十三): 攔截器的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
浠水县| 中山市| 甘南县| 汉源县| 迭部县| 宝清县| 深泽县| 哈巴河县| 德安县| 平乐县| 静安区| 德庆县| 安吉县| 铁岭市| 寿光市| 旬阳县| 蛟河市| 黑龙江省| 甘孜县| 肇庆市| 湘乡市| 桃江县| 五河县| 睢宁县| 东安县| 都兰县| 九江县| 边坝县| 武隆县| 金平| 绥棱县| 中西区| 姜堰市| 竹北市| 石景山区| 浦县| 阜康市| 陆良县| 五家渠市| 绥中县| 乌鲁木齐市|