从头开始写项目(Q):通过扩展Convertor玩到ResponseBodyAdvice

本文介绍如何在Spring MVC中通过扩展类型转换器Convertor和使用ResponseBodyAdvice统一返回对象格式和异常处理。通过创建自定义类型转换器、配置Spring MVC、编写ResponseBodyAdvice,实现了对Controller返回值和异常的封装,解决了返回值为null的问题。文中还详细解析了ResponseBodyAdvice的执行顺序和注解@Order的作用。
摘要由CSDN通过智能技术生成

要求:RestFul风格:统一返回对象格式,统一异常对象处理。

类似于一个Controller返回一个Object,然后统一封装成我们自定义的对象AppResponse。

我一开始的思路如下图:


结果老大对拓展类型转换器产生浓厚的兴趣(典型的自己给自己挖坑)。

直接上用法,再解释原理。

第一步,依赖,我直接贴全部了:

	<properties>
		<spring.data.jpa.version>2.0.5.RELEASE</spring.data.jpa.version>
		<hibernate.validator.version>6.0.8.Final</hibernate.validator.version>
		<junit.jupiter.version>5.1.0</junit.jupiter.version>
		<junit.platform.version>1.1.0</junit.platform.version>
		<org.springframework.version>5.0.4.RELEASE</org.springframework.version>
		<jackson.version>2.9.4</jackson.version>
		<servlet.version>3.0.1</servlet.version>
		<mysql.connector.version>6.0.6</mysql.connector.version>
		<hibernate.version>5.2.13.Final</hibernate.version>
		<HikariCP.version>2.7.8</HikariCP.version>
		<logback.version>1.2.3</logback.version>
		<common.lang3.version>3.0</common.lang3.version>
		<aspectjweaver.version>1.8.8</aspectjweaver.version>
		<shiro.core.version>1.2.2</shiro.core.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${servlet.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-jpa</artifactId>
			<version>${spring.data.jpa.version}</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.connector.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-ehcache</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>${hibernate.validator.version}</version>
		</dependency>
		<!-- <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> 
			<version>3.4</version> </dependency> -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>${HikariCP.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback.version}</version>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<version>${junit.jupiter.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-runner</artifactId>
			<version>${junit.platform.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<version>${junit.jupiter.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${common.lang3.version}</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${aspectjweaver.version}</version>
		</dependency>
<dependency>
        <groupId>org.apache.shiro</groupId>
        &
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值