org.dozer.MappingException:找不到类中字段(元类)的读取或写入方法
Posted
技术标签:
【中文标题】org.dozer.MappingException:找不到类中字段(元类)的读取或写入方法【英文标题】:org.dozer.MappingException: No read or write method found for field (metaClass) in class 【发布时间】:2018-10-02 10:55:53 【问题描述】:我在运行 Spring Boot 应用程序时收到此错误。 谁能告诉我怎么解决?
我的 SpringBoot 项目基于 Groovy 和 Gradle。
错误消息如下所示
16:18:37.215 [http-nio-9092-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet]
- Servlet.service() for servlet [dispatcherServlet] in context with path []
threw exception [Request processing failed; nested exception is
org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'org.dozer.MappingException:
No read or write method found for field (metaClass) in class (class com.myapp.Orders)'
with class 'org.dozer.MappingException' to class 'java.util.Map'] with root cause
我在类 (com.myapp.Orders) 中没有 metaClass 字段。 类(com.myapp.Orders.groovy)如下所示
import lombok.Getter
import lombok.Setter
@Getter
@Setter
class Orders
long orderId
String kNo
String sOrderCode
int orderStatus
String deliveryTypeCode
String receiverFullName
Date orderAt
目标类(com.myapp.AfOrders.groovy)如下所示
import lombok.Getter
import lombok.Setter
@Getter
@Setter
class AfOrders
String kNo
String sOrderCode
int orderStatus
String deliveryTypeCode
String receiverFullName
Date orderAt
String fType
我的 build.gradle 如下所示
buildscript
ext
springBootVersion = '2.0.0.RELEASE'
repositories
mavenCentral()
maven url "https://repo.spring.io/snapshot"
maven url "https://repo.spring.io/milestone"
maven url 'http://jcenter.bintray.com'
dependencies
classpath("io.spring.gradle:dependency-management-plugin:1.0.4.RELEASE")
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
classpath("mysql:mysql-connector-java:5.1.45")
classpath ("org.junit.platform:junit-platform-gradle-plugin:1.1.0")
apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.junit.platform.gradle.plugin'
group = 'com.myapp'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories
mavenCentral()
dependencies
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-data-rest')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-webflux')
compile('org.springframework.boot:spring-boot-starter-security')
testCompile('org.springframework.security:spring-security-test')
compile('org.flywaydb:flyway-core')
compile('org.springframework.data:spring-data-rest-hal-browser')
compile('org.codehaus.groovy:groovy')
runtime('mysql:mysql-connector-java')
compileOnly('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('mysql:mysql-connector-java:5.1.45')
runtime('mysql:mysql-connector-java:5.1.45')
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1')
compile('org.hibernate:hibernate-validator:6.0.8.Final')
compile('net.sf.dozer:dozer:5.5.1')
compile('net.sf.dozer:dozer-spring:5.5.1')
我的配置文件在下面
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
<mapping map-null="false">
<class-a>com.myapp.Orders</class-a>
<class-b>com.myapp.AfOrders</class-b>
<field-exclude type="one-way">
<a>metaClass</a>
<b>metaClass</b>
</field-exclude>
</mapping>
</mappings>
【问题讨论】:
一些问题似乎提到检查你的推土机映射文件是否有错别字等,例如***.com/questions/14783315/… 只是问它并排除那些争夺领域的可能性:你为什么要混合 Lombok 和 Groovy?您的示例代码在 Lombok 和 Groovy 中基本相同(您不需要def String x
,只需String x
就可以了)
@cfrick 我正在使用 Lombok,因为这是 Spring Boot 应用程序,我不想编写 getter 和 setter 方法而不是 @Data。我把@Data 改成@Getter 和@Setter,但还是有同样的错误
感谢@cfrick,我从 def String x 中删除了 def。但仍然是同样的错误
@Mike 我认为这是常规问题(GroovyCastException),而不是拼写错误。但我不知道为什么会这样。
【参考方案1】:
我删除了“单向”,它有效!
【讨论】:
以上是关于org.dozer.MappingException:找不到类中字段(元类)的读取或写入方法的主要内容,如果未能解决你的问题,请参考以下文章