java - 未调用 Spring Boot RequestMapping 方法

标签 java spring spring-boot

我正在学习 SpringBoot。使用 Spring JavaPersistenceAPI(JPA) 和 apache derby 作为数据库。 我在将 URL 映射到方法时遇到问题

我有主题:

@Entity
public class Topic {

@Id
private String id;
private String name;
private String description;

public Topic() {

}

public Topic(String id, String name, String description) {
    this.id = id;
    this.name = name;
    this.description = description;
} ... getters & setters...

我有一个主题 Controller 。它工作正常:

@RestController
    public class TopicController {

@Autowired
private TopicService topicServ;

@RequestMapping("/topics")
public List<Topic> getAllTopics() {
    return topicServ.getAllTopics();
} 
@RequestMapping("/topics/{topicId}")
public Topic getTopic(@PathVariable String topicId) {
    return topicServ.getTopic(topicId);
}... more methods (they work fine)

每个主题都有类(class):

@Entity
public class Course {

private String id;
private String name;
private String description;
@ManyToOne
private Topic topic;

public Course() {

}

public Course(String id, String name, String description, String topicId) {
    this.id = id;
    this.name = name;
    this.description = description;
    this.setTopic(new Topic(topicId, "CourseConstructorNAME", "CourseConstructorDESCRIPTION"));
} ... getters & setters ...

我有类(class) Controller ,我在其中找到了问题:

@RestController
public class CourseController {

@Autowired
private CourseService courseServ;

@GetMapping(value = "/topics/{topicId}/courses")
public List<Course> getAllCourses(@PathVariable("topicId") String topicId){
    System.out.println("Hi"); *<-- does not print anything*
    return courseServ.getAllCourses(topicId);
}

问题是,向 http://localhost:8080/topics/java/courses 发出 GET 请求, 返回 404 错误信息:

{
"timestamp": "2018-11-26T19:30:08.871+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/topics/java/courses"
}

我希望得到与从 URL 中获取的主题 ID 相对应的类(class)列表。失败让我感到困惑,因为主题 Controller 工作正常并且几乎相同。

所以,因为我放在上面的 sysout 没有打印任何东西,我一定是在做一些非常愚蠢的事情;但以防万一,这里是 courseServ 的代码:

@Service
public class CourseService {

@Autowired
private CourseRepository courseRepo;

public List<Course> getAllCourses(String topicId){
    System.out.println("Calling get all courses from course service");
    List<Course> theList = new ArrayList<Course>();
    courseRepo.findByTopic_Id(topicId).forEach(theList::add);

    System.out.println(theList.toString());

    return theList; 
}

这里是 courseRepo:

public interface CourseRepository extends CrudRepository<Course, String> {

    public List<Course> findByTopic_Id(String topicId);
}

这是 spring 控制台日志:

2018-11-26 13:29:25.142  INFO 16252 --- [           main] P.ProjectNameWithJpaApplication          : Starting ProjectNameWithJpaApplication on JulioPHX with PID 16252 (C:\SpringToolSuite\workspace\ProjectNameWithJPA\target\classes started by JulioPHX in C:\SpringToolSuite\workspace\ProjectNameWithJPA)
2018-11-26 13:29:25.148  INFO 16252 --- [           main] P.ProjectNameWithJpaApplication          : No active profile set, falling back to default profiles: default
2018-11-26 13:29:27.107  INFO 16252 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2018-11-26 13:29:27.238  INFO 16252 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 116ms. Found 1 repository interfaces.
2018-11-26 13:29:28.254  INFO 16252 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$c18d73e6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-11-26 13:29:29.466  INFO 16252 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2018-11-26 13:29:29.501  INFO 16252 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-11-26 13:29:29.502  INFO 16252 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/9.0.12
2018-11-26 13:29:29.525  INFO 16252 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_191\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_191/bin/server;C:/Program Files/Java/jre1.8.0_191/bin;C:/Program Files/Java/jre1.8.0_191/lib/amd64;C:\Scripts\;C:\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Python37\;C:\Python37\Scripts;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Git\cmd;C:\Program Files\RedHat\java-1.8.0-openjdk-1.8.0.161-1\bin;C:\WINDOWS\System32\OpenSSH\;C:\MinGW\bin;C:\Program Files\MicrosoftVSCode\bin;C:\cygwin64\bin;C:\Program Files\apache-maven-3.5.4\bin;C:\Users\JulioPHX\AppData\Local\Microsoft\WindowsApps;;C:\Users\JulioPHX\Microsoft VS Code\bin;C:\SpringToolSuite\sts-bundle\sts-3.9.6.RELEASE;;.]
2018-11-26 13:29:29.773  INFO 16252 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-11-26 13:29:29.774  INFO 16252 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4461 ms
2018-11-26 13:29:29.852  INFO 16252 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-11-26 13:29:29.861  INFO 16252 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-11-26 13:29:29.862  INFO 16252 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-11-26 13:29:29.862  INFO 16252 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'formContentFilter' to: [/*]
2018-11-26 13:29:29.862  INFO 16252 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-11-26 13:29:30.698  INFO 16252 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-11-26 13:29:30.703  WARN 16252 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=org.apache.derby.jdbc.EmbeddedDriver was not found, trying direct instantiation.
2018-11-26 13:29:31.587  INFO 16252 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Driver does not support get/set network timeout for connections. (Feature not implemented: No details.)
2018-11-26 13:29:31.596  INFO 16252 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2018-11-26 13:29:31.764  INFO 16252 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2018-11-26 13:29:31.925  INFO 16252 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.7.Final}
2018-11-26 13:29:31.929  INFO 16252 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2018-11-26 13:29:32.247  INFO 16252 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2018-11-26 13:29:32.586  INFO 16252 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.DerbyTenSevenDialect
2018-11-26 13:29:34.603  WARN 16252 --- [           main] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "drop table topic" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop table topic" via JDBC Statement

Caused by: java.sql.SQLSyntaxErrorException: Schema 'SA' does not exist

Caused by: org.apache.derby.iapi.error.StandardException: Schema 'SA' does not exist

2018-11-26 13:29:34.718  INFO 16252 --- [           main] o.h.t.schema.internal.SchemaCreatorImpl  : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@74b00247'
2018-11-26 13:29:34.725  INFO 16252 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-11-26 13:29:36.108  INFO 16252 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2018-11-26 13:29:36.251  WARN 16252 --- [           main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2018-11-26 13:29:36.757  INFO 16252 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-11-26 13:29:36.763  INFO 16252 --- [           main] P.ProjectNameWithJpaApplication          : Started ProjectNameWithJpaApplication in 12.543 seconds (JVM running for 13.617)
2018-11-26 13:29:42.083  INFO 16252 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2018-11-26 13:29:42.084  INFO 16252 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2018-11-26 13:29:42.100  INFO 16252 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 16 ms
2018-11-26 13:29:42.298  INFO 16252 --- [nio-8080-exec-1] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory

还有 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>PackageNameWithJPA</groupId>
<artifactId>ProjectNameWithJPA</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>ProjectNameWithJPA</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</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-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <scope>runtime</scope>
    </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>

项目结构:

enter image description here

提前感谢您的帮助。

最佳答案

我有同样的问题。这是因为您的属性默认设置为: “spring.jpa.hibernate.ddl-auto=create-drop”

改变它 在 application.properties 文件中。如果这不在那边添加

"spring.jpa.hibernate.ddl-auto=update"

在您的 application.properties 文件中添加一行。它工作正常。

关于java - 未调用 Spring Boot RequestMapping 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53488548/

相关文章:

java - 如何在 hibernate 中处理大型集合

java - 如何在 Spring Boot 2.2.4 中将 @ConstructorBinding 和 @PropertySource 与 @ConfigurationProperties 一起使用?

java - WebClient (spring-boot-starter-webflux) 向错误的 url 发送请求

java - 如何根据 ajax 弹出窗口或对话框的输入执行 Controller

java - 有没有办法找到 Hibernate 的加载时间?

java - 静态成员被实例引用访问

java - Maven 嵌入器 : Compiler dependency could not be resolved - No connector factories available

java - 如何延迟加载所有 Spring bean,无论它是由 Springboot 2.2 中的 @Bean 还是 @Component 定义的

java - 如何从 Eclipse 正确重新运行 Spring Boot 应用程序?

spring - WebSphere Liberty + Springboot + Hibernate + JNDI