Spring boot controller не может вызвать ошибку 404 - PullRequest
0 голосов
/ 21 апреля 2020

Я создаю это приложение Spring Boot с Hibernate и MySQL. Я знаю, что это довольно основательно c, и один и тот же вопрос задают несколько раз, но я не могу понять, почему мой контроллер не срабатывает и выдает ошибку 404. Как я вижу, проблема в ComponentScan, где мои @SpringBootApplication и @RestController находятся в одном пакете, а мои @Repository и @Entity l ie в другом пакете. Когда я включаю пакет как @ComponentScan(basePackages = "com.sample.user"), проект собирается и запускается успешно, но не попадает в метод GET getUser() и не выводит на консоль сообщения об ошибке. Метод GET срабатывает только тогда, когда я опускаю @Autowired private UserRepository userRepository; из класса контроллера вместе с @ComponentScan в классе приложения.

Controller

package com.sample.rest.controller;

import com.sample.user.entity.User;
import com.sample.user.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping ("user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/")
    public User getUser() {
        User user  = new User();
        user.setFirstName("Lady");
        user.setLastName("Gaga");
        user.setEmail("l.gaga@ymail.com");
        userRepository.save(user);
        return user;
    }
}

Приложение

package com.sample.rest;

import com.sample.rest.controller.UserController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = "com.sample.user")
public class RestServicesApplication {

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

}

Интерфейс репозитория

package com.sample.user.repository;

import com.sample.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.stereotype.Repository;

@EnableJpaRepositories
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}

Entity

package com.sample.user.entity;

import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;

@Entity
@Table(name = "user")
@EntityListeners(AuditingEntityListener.class)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "first_name", nullable = false)
    private String firstName;

    @Column(name = "last_name", nullable = false)
    private String lastName;

    @Column(name = "email_address", nullable = false)
    private String email;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Браузер Страница https://ibb.co/KDsqLn3

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

С @ComponentScan(basePackages = "com.sample.user") вы перезаписываете поведение по умолчанию.

Так что или удалите это и поместите пакеты ниже пакета, где у вас есть @SpringBootApplication, или добавьте все пакеты в @ComponentScan.

Я рекомендую не использовать поведение Spring Boot по умолчанию.

Поэтому удалите ComponentScan и переместите RestServicesApplication в пакет com.sample

0 голосов
/ 21 апреля 2020

Используйте это, чтобы решить вашу проблему.

@ComponentScan(basePackages = "com.sample")

или используйте несколько пакетов, например

@ComponentScan({ "com.sample", "com.sample.user" })

...