在测试我的Controller类时,我遇到了这个异常
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.util.Assert.notEmpty(Assert.java:450)
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:54)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:88)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:43)
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:141)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1761)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698)
我的控制器测试类如下所示
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = {SensorController.class}, secure = false)
public class SensorControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private SensorService sensorService;
.....
}
我的引导类
@SpringBootApplication(scanBasePackages = "com.javadroider")
@RestController
@EntityScan("com.javadroider.notifier.commons.model")
@EnableJpaRepositories(basePackages = "com.javadroider.notifier")
public class NotifierApplication {
@GetMapping("/")
public String home(){
return "Welcome to Notifier";
}
public static void main(String[] args) {
SpringApplication.run(NotifierApplication.class, args);
}
}
我的依赖项如下所示
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
IllegalArgumentException:必须至少存在一个JPA元模型没有解决我的问题
@webmvctest
注释不会自动为您配置任何存储库或JPA层bean,因为它主要关注的只是控制器级别的测试。
您的主类NotifierApplication尝试做得太多了。关于良好的编程实践,请参见单一责任原则:https://en.wikipedia.org/wiki/single_responsibility_principle
main类应该只用来定义应用程序它本身不应该是@RestController
。例如,创建一个单独的类NotifierController,并将其作为@RestController
,其中定义了endpoint:
@RestController
public class NotifierController {
@GetMapping("/")
public String home(){
return "Welcome to Notifier";
}
}
并将其与主类分开:
@SpringBootApplication(scanBasePackages = "com.javadroider")
@EntityScan("com.javadroider.notifier.commons.model")
@EnableJpaRepositories(basePackages = "com.javadroider.notifier")
public class NotifierApplication {
public static void main(String[] args) {
SpringApplication.run(NotifierApplication.class, args);
}
}
它失败的原因是由于主类上的注释,WebMvcTest试图扫描JPA存储库和实体,但这没有为WebMVCTests配置。
问题内容: 在开始使用spring rest时,我得到了如下错误 用下面的代码 以下是我的pom.xml UTF-8 UTF-8 1.8 请帮我。我不知道如何解决这个错误 问题答案: 你已添加 在你的pom.xml中。 Spring Boot会尝试自动为JPA创建实体工厂,但是你尚未定义有关JPA模型的任何内容。 尝试将其删除,以测试到目前为止你做了什么。
从spring rest开始时,我得到以下错误: 带有以下代码 UTF-8 UTF-8 1.8 请帮帮我.我不知道如何解决这个错误
我的父母POM是: 我还添加了JPA: 注意:当我降级到2.0.1时,它可以工作。这是2.0.2中的bug吗??
application.java applicationconfiguration.java AccountController.java null 删除注释解决了这个问题,但不幸的是,它似乎破坏了我的应用程序。 我做错了什么?
原因:org.springframework.beans.factory.BeanCreationException:创建名为“JPA MappingContext”的bean时出错:调用init方法失败;嵌套异常是java.lang.IllegalArgumentException:必须至少存在一个JPA元模型!
我是springboot的新手,我正在尝试解决以下运行时错误: 如有任何帮助,我将不胜感激 这是我的POM: