SpringMVC自带toJson方法

本文介绍在MVC框架中如何使用@ResponseBody注解结合fastjson实现对象直接转换为JSON格式,无需调用toJson方法。通过配置message-converters及在pom.xml中引入fastjson依赖,简化了JSON数据的处理流程。

公司同一类型的项目有两个框架,老版本的要用到toJson,新版本的不需要,直接对象就好了。当时就有点奇怪,就看了下原来MVC利用@ResponseBody注解,在加上把fastjson包直接放到pom文件里引入就好了。

<mvc:annotation-driven>
		<mvc:message-converters>
			<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
				<property name="supportedMediaTypes">
					<list>
						<value>application/json;charset=UTF-8</value>
						<value>text/html;charset=UTF-8</value>
						<!--<value>text/json;charset=UTF-8</value>-->
					</list>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

贴出公司使用的
pom引入的包:

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
      </dependency>
      

参考

<?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.gdsc.bio</groupId> <artifactId>bio-backend-service</artifactId> <version>1.1.39</version> <!-- 定义profile --> <profiles> <!-- 开发环境 --> <profile> <id>dev</id> <properties> <!-- 定义profileActive属性 --> <profileActive>dev</profileActive> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!-- 测试环境 --> <profile> <id>test</id> <properties> <profileActive>test</profileActive> </properties> </profile> <!-- 生产环境 --> <profile> <id>prod</id> <properties> <profileActive>release</profileActive> </properties> </profile> </profiles> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> </parent> <dependencies> <!--okhttp--> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.14.9</version> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.0.7</version> </dependency> <!--rabbitmq消息队列--> <!--rabbitmq--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--集成springmvc框架并实现自动配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除log4j --> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> </exclusions> </dependency> <!-- 使用最新的logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.10</version> </dependency> <dependency> <groupId>com.gdsc</groupId> <artifactId>scadp-core</artifactId> <version>2.48-SNAPSHOT</version> <!--排除自带的poi--> <exclusions> <exclusion> <groupId>org.apache.poi</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.5.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-digester/commons-digester --> <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> <version>1.6</version> <exclusions> <exclusion> <artifactId>commons-beanutils</artifactId> <groupId>commons-beanutils</groupId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.12</version> </dependency> <!-- https://mvnrepository.com/artifact/com.lowagie/itext --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <!-- https://mvnrepository.com/artifact/com.lowagie/itextasian --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itextasian</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>org.jbarcode</groupId> <artifactId>jbarcode</artifactId> <version>0.2.8</version> </dependency> <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> <dependency> <groupId>com.qrcode</groupId> <artifactId>qrcode</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext-rtf</artifactId> <version>2.1.7</version> </dependency> <!-- Swagger API文档 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-bean-validators</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-jexl</artifactId> <version>2.0</version> </dependency> <!-- nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> </dependency> <!-- 如果走配置中心需要添加此依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.0.RELEASE</version> </dependency> <!--<!– https://mvnrepository.com/artifact/com.jfinal/jfinal –>--> <!--<dependency>--> <!--<groupId>com.jfinal</groupId>--> <!--<artifactId>jfinal</artifactId>--> <!--<version>3.4</version>--> <!--</dependency>--> <!--<!– https://mvnrepository.com/artifact/log4j/log4j –>--> <!--<dependency>--> <!--<groupId>log4j</groupId>--> <!--<artifactId>log4j</artifactId>--> <!--<version>1.2.17</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.slf4j</groupId>--> <!--<artifactId>slf4j-api</artifactId>--> <!--<version>1.7.25</version>--> <!--</dependency>--> <!--<!– https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api –>--> <!--<dependency>--> <!--<groupId>javax.servlet</groupId>--> <!--<artifactId>javax.servlet-api</artifactId>--> <!--<version>3.1.0</version>--> <!--<scope>provided</scope>--> <!--</dependency>--> <!-- scadp-service-api --> <!-- <dependency>--> <!-- <groupId>com.gdsc</groupId>--> <!-- <artifactId>scadp-service-api</artifactId>--> <!-- <version>1.0.2-SNAPSHOT</version>--> <!-- </dependency>--> <!-- xxl-job-core --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>net.sf.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.1</version> <!--排除自带的poi--> <exclusions> <exclusion> <groupId>org.apache.poi</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-jexl3</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>4.0.3</version> <!--排除自带的poi--> <!-- <exclusions>--> <!-- <exclusion>--> <!-- <groupId>org.apache.poi</groupId>--> <!-- <artifactId>*</artifactId>--> <!-- </exclusion>--> <!-- </exclusions>--> </dependency> <!-- 日志 --> <!-- logback-classic --> <!-- <dependency>--> <!-- <groupId>ch.qos.logback</groupId>--> <!-- <artifactId>logback-classic</artifactId>--> <!-- </dependency>--> <!-- skywalking的logback依赖 --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.7.0</version> </dependency> <!--与logstash对应的日志收集依赖--> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>4.10</version> </dependency> </dependencies> <build> <finalName>${project.name}-${project.version}-${profileActive}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <includes> <include>net.sf.jxls:jxls-core</include> <include>org.apache.poi:poi</include> <include>org.apache.poi:poi-ooxml</include> </includes> </artifactSet> <relocations> <relocation> <pattern>org.apache.poi</pattern> <shadedPattern>shaded.jxls.poi</shadedPattern> </relocation> </relocations> <transformers> <!-- 1. 处理 Manifest 文件 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/> <!-- 2. 合并 Service Loader 文件 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> <!-- 3. 合并其他资源文件(如 spring.handlers) --> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> 指定JDK编译版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包跳过测试 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <!-- 避免font文件的二进制文件格式压缩破坏 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <nonFilteredFileExtensions> <nonFilteredFileExtension>jasper</nonFilteredFileExtension> <nonFilteredFileExtension>jrxml</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> <nonFilteredFileExtension>xlsx</nonFilteredFileExtension> <nonFilteredFileExtension>ftl</nonFilteredFileExtension> <nonFilteredFileExtension>doc</nonFilteredFileExtension> <nonFilteredFileExtension>docx</nonFilteredFileExtension> <nonFilteredFileExtension>woff</nonFilteredFileExtension> <nonFilteredFileExtension>woff2</nonFilteredFileExtension> <nonFilteredFileExtension>eot</nonFilteredFileExtension> <nonFilteredFileExtension>ttf</nonFilteredFileExtension> <nonFilteredFileExtension>svg</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xls</include> <include>**/*.xlsx</include> <include>**/*.xml</include> <include>**/*.json</include> <include>**/*.ftl</include> </includes> </resource> <!--<resource> <directory>src/main/resources/template</directory> </resource> <resource> <directory>src/main/resources/watermark</directory> </resource> <resource> <directory>src/main/resources/additional</directory> </resource>--> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/*.xls</exclude> <exclude>**/*.xlsx</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.xml</include> <include>**/*.xls</include> <include>**/*.xlsx</include> <include>**/*.jasper</include> <include>**/*.jrxml</include> </includes> </resource> </resources> </build> </project> Cannot find 'resource' in class org.apache.maven.plugins.shade.resource.ManifestResourceTransformer
最新发布
06-18
<think>我们正在解决一个Maven构建问题:在使用maven-shade-plugin时,遇到无法找到'resource'字段在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中的错误。根据经验,这个错误通常是由于插件配置中使用了不正确的属性名导致的。在ManifestResourceTransformer中,用于指定清单文件(MANIFEST.MF)的Main-Class的属性名是"mainClass",而不是"resource"。但是,问题描述中提到了'resource'字段,这可能是用户在配置中尝试设置一个资源相关的属性,而实际上在ManifestResourceTransformer中并没有名为'resource'的字段。让我们查阅maven-shade-plugin的官方文档:在ManifestResourceTransformer的配置中,可以设置的属性包括:-mainClass:指定可执行jar的主类(即Main-Class清单属性)。-manifestEntries:用于指定其他任意的清单属性(键值对)。-etc.因此,用户可能在配置中写了类似如下的内容:<transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><resource>com.example.Main</resource></transformer>但正确的配置应该是使用<mainClass>:<transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.example.Main</mainClass></transformer>另外,如果用户想要添加其他清单属性,应该使用<manifestEntries>,例如:<transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.example.Main</mainClass><manifestEntries><Class-Path>.</Class-Path><Build-Number>123</Build-Number></manifestEntries></transformer>所以,解决方案是:检查pom.xml中maven-shade-plugin的配置,确保对于ManifestResourceTransformer使用的是正确的属性名(mainClass或manifestEntries),而不是resource。此外,还需要注意:maven-shade-plugin的版本也可能影响可用的配置属性。建议使用较新的稳定版本(如3.2.4或更高)。步骤总结:1.打开pom.xml文件,找到maven-shade-plugin的配置部分。2.检查所有使用org.apache.maven.plugins.shade.resource.ManifestResourceTransformer的地方。3.将<resource>元素(如果有)替换为<mainClass>(如果意图是设置主类)或使用<manifestEntries>设置其他清单属性。4.确保插件版本较新(至少3.2.4),如果不是,升级插件版本。示例配置:```xml<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.4.1</version><!--使用较新版本--><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.example.Main</mainClass><!--这里设置主类--><!--可选:其他清单属性--><manifestEntries><Class-Path>.</Class-Path></manifestEntries></transformer></transformers></configuration></execution></executions></plugin></plugins></build>```如果问题仍然存在,请检查错误信息是否确实是由于这个配置引起的,或者是否有其他配置问题。相关问题:1.如何配置maven-shade-plugin来生成可执行jar?2.在maven-shade-plugin中,除了ManifestResourceTransformer还有哪些常用的Transformer?3.如何解决maven-shade-plugin打包时出现的重复资源问题?</think>### 解决 `ManifestResourceTransformer` 缺失 `resource` 字段的问题 在 Maven 项目中使用 `maven-shade-plugin` 时,配置 `ManifestResourceTransformer` 时遇到无法找到 `resource` 字段的错误,通常是由于 **配置属性名错误** 或 **插件版本兼容性问题** 导致的。以下是详细解决方案: --- #### 原因分析 1. **属性名错误** `ManifestResourceTransformer` 的正确属性是 `mainClass`(用于设置主类),而非 `resource`。错误配置示例: ```xml <!-- ❌ 错误写法:resource 字段不存在 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <resource>com.example.Main</resource> <!-- 此处错误 --> </transformer> ``` 2. **插件版本过旧** 旧版本插件(如 `< 3.0`)可能不支持标准属性名。 --- #### 解决方案 ##### 1. 修正属性名(推荐) 将 `resource` 替换为 `mainClass`: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <!-- 使用较新版本 --> <executions> <execution> <phase>package</phase> <goals><goal>shade</goal></goals> <configuration> <transformers> <!-- ✅ 正确写法:使用 mainClass --> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.Main</mainClass> <!-- 设置主类 --> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` ##### 2. 升级插件版本 若问题持续,升级到最新版插件(截至2024年推荐 `3.5.1`): ```xml <version>3.5.1</version> <!-- 修复旧版本的兼容性问题 --> ``` ##### 3. 添加其他清单属性(可选) 如需设置更多清单属性(如 `Class-Path`),使用 `manifestEntries`: ```xml <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.Main</mainClass> <manifestEntries> <Class-Path>libs/</Class-Path> <Build-Time>${maven.build.timestamp}</Build-Time> </manifestEntries> </transformer> ``` --- #### 验证步骤 1. 清理并重新构建项目: ```bash mvn clean package ``` 2. 检查生成的 `MANIFEST.MF` 文件(位于 `target/*-shaded.jar` 中),确认包含: ``` Main-Class: com.example.Main Class-Path: libs/ ``` > **注意**:如果依赖冲突导致类加载问题,可添加 `ServicesResourceTransformer` 解决 SPI 服务文件冲突[^1]。 --- #### 常见错误排查 | 错误现象 | 解决方案 | |-----------------------------------|------------------------------------------| | `No such field: resource` | 将 `<resource>` 改为 `<mainClass>` | | 主类未生效 | 检查 `mainClass` 值是否包含完整包路径 | | 清单文件未生成 | 确认插件已绑定到 `package` 阶段 | 通过上述步骤,可解决 `resource` 字段缺失问题并正确生成可执行 JAR。 [^1]: Maven 官方文档中关于 `ServicesResourceTransformer` 的说明:解决 SPI 配置文件冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值