Как исправить ошибку «HTTP-404» во время запроса GET в веб-сервисе REST с использованием весенней загрузки - PullRequest
0 голосов
/ 28 декабря 2018

Мой пример веб-службы REST с пружинной загрузкой выдает ошибку 404, и я не уверен, что что-то пошло не так

package com.in28minutes.springboot.studentservices;
@SpringBootApplication
public class StudentServicesApplication {

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

}

package com.in28minutes.springboot.controller;
@RestController
public class StudentController {

@Autowired
private StudentService studentService;

@GetMapping("/students/{studentId}/courses")
public List<Course> retrieveCoursesForStudent(@PathVariable String 
    studentId) {
    return studentService.retrieveCourses(studentId);
}

@GetMapping("/students/{studentId}/courses/{courseId}")
public Course retrieveDetailsForCourse(@PathVariable String studentId,
        @PathVariable String courseId) {
    return studentService.retrieveCourse(studentId, courseId);
}

}

Мой запрос от отправителя запроса POSTMan REST: http://localhost:8080/students/stu1/courses/course1

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>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.in28minutes.springboot</groupId>
 <artifactId>student-services</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>student-services</name>
 <description>Demo project for Spring Boot</description>

 <properties>
    <java.version>1.8</java.version>
 </properties>

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</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>

Ответ:

{"отметка времени": "2018-12-28T02: 48: 00.185 + 0000", "статус": 404, "ошибка": "не найден"," message ":" Сообщение недоступно "," путь ":" / Students / Stu1 / курсы / курс1 "}

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Проблема устранена, необходимо добавить @Component в класс Service вместе с @ComponentScan в основном классе приложения:

package com.in28minutes.springboot.service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.stereotype.Component;

import com.in28minutes.springboot.model.Course;
import com.in28minutes.springboot.model.Student;

@Component
public class StudentService {

public List<Course> retrieveCourses(String studentId) {
    Map<String, Course> courses = Student.getStudentObj(studentId).getCourses();
    List<Course> courseList = 
    courses.values().parallelStream().collect(Collectors.toList());
    return courseList;
 }

 public Course retrieveCourse(String studentId, String courseId) {
    return Student.getStudentObj(studentId).getCourses().get(courseId);
 }

}

package com.in28minutes.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication 
@ComponentScan("com.in28minutes.springboot")
public class StudentServicesApplication {

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

}
0 голосов
/ 28 декабря 2018

Как и предполагалось, у вас есть классы контроллеров в другом пакете com.in28minutes.springboot.controller; и основной класс загрузки Spring в другом пакете com.in28minutes.springboot.studentservices;

@ SpringBootApplication

По умолчанию @SpringBootApplication будет сканировать только из пакета класса, который объявляет эту аннотацию.

Это удобная аннотация, которая эквивалентна объявлению @Configuration, @EnableAutoConfiguration и @ ComponentScan.

Если определенные пакеты не определены, сканирование будет выполняться из пакета класса, который объявляет эту аннотацию.

используйте @ComponentScan для сканирования пакета контроллера

@ComponentScan(basePackages = {"com.in28minutes.springboot.controller"})
 @SpringBootApplication
 public class StudentServicesApplication {

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

Больше информации: ref

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...