对Spring Controller的请求返回404找不到

问题描述

我试图建立一个Spring MVC应用程序,但是每次我从邮递员调用http:// localhost:9001 / tasks API时,都会出现以下错误

enter image description here

这是我的代码

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class TaskManagerApplication {

public static void main(String[] args) {
    SpringApplication.run(TaskManagerApplication.class,args);
}


@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("http://localhost:4200");
        }
    };
}
}

TaskRepository:

@Path("tasks")
@ApiIgnore
@Component
@AllArgsConstructor
public class TaskResource {

private final TaskService taskService;

@GET
@Produces(APPLICATION_JSON)
public List<Task> getAllTasks() {
    return taskService.getTasks();
}

TaskService:

@Service
@requiredArgsConstructor
public class TaskService {

private final TaskRepository taskRepository;

public List<Task> getTasks() {
    return taskRepository.findAll();
}

项目结构:

enter image description here

解决方法

您在春季引导中使用JAX-RS。 Spring会以自己的方式处理休止符,如果您想使用JAX-RS而不是Springs Rest Annotations,则需要做一些额外的配置。

首先,您需要在JAX-RSbuild.gradle文件中添加pom.xml依赖项。我想你已经做到了。泽西岛是JAX-RS 的实现之一,如果要添加它,则需要执行以下操作。
build.gradle

implementation "org.springframework.boot:spring-boot-starter-jersey"

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>

之后,您需要向Spring注册JAX-RS端点。我想你错过了这一步。

import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JaxrsConfig extends ResourceConfig {

    public JaxrsConfig() {
        register(TaskResource.class);
    }
}

此后,您的JAX-RS端点将向spring注册。

但是,如果您使用spring,我建议您遵循spring注释。如果使用spring批注,则代码将如下所示。

@RestController
@RequestMapping(path = "tasks")
public class TaskResource {

    @GetMapping(path = "",produces = MediaType.APPLICATION_JSON_VALUE)
    public List<String> getAllTasks() {
        return Arrays.asList("a","b");
    }
}

此外,您还需要从spring中删除JAX-RS才能使用此Spring MVC注释。