【问题标题】:Request to Spring Controller returns 404 not found对 Spring Controller 的请求返回 404 not found
【发布时间】:2021-02-07 11:08:35
【问题描述】:

我正在尝试设置 Spring MVC 应用程序,但每次我从邮递员调用 http://localhost:9001/tasks API 时都会收到以下错误:

这是我的代码:

@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");
        }
    };
}
}

任务库:

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

private final TaskService taskService;

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

任务服务:

@Service
@RequiredArgsConstructor
public class TaskService {

private final TaskRepository taskRepository;

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

项目结构:

【问题讨论】:

    标签: java spring spring-mvc model-view-controller http-status-code-404


    【解决方案1】:

    您在 Spring Boot 中使用 JAX-RS。 Spring以自己的方式处理rest,如果你想使用JAX-RS而不是Springs Rest Annotations,你需要做一些额外的配置。

    首先,您需要在build.gradlepom.xml 文件中添加JAX-RS 依赖项。我猜你已经这样做了。 Jersey是JAX-RS implementation之一,如果你想添加这个,你需要执行以下操作。
    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 注释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2020-03-16
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 2012-08-10
      相关资源
      最近更新 更多