问题描述
我试图建立一个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");
}
};
}
}
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();
}
项目结构:
解决方法
您在春季引导中使用JAX-RS
。 Spring会以自己的方式处理休止符,如果您想使用JAX-RS
而不是Springs Rest Annotations,则需要做一些额外的配置。
首先,您需要在JAX-RS
或build.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注释。