【问题标题】:Spring boot + spring data = 404 :(弹簧靴 + 弹簧数据 = 404 :(
【发布时间】:2019-05-03 23:20:11
【问题描述】:

我做了我的 Spring Boot 项目,一切都很好,直到我开始拧弹簧数据 + 休眠。我有很多错误,我一直坚持。最后,我设法摆脱了所有错误,但是现在,当我运行我的项目时,当我切换到 localhost:8080 时,我总是看到 404 错误,并且在我的 IDE 中没有错误:(.

应用:

@SpringBootApplication(scanBasePackages = {"Service", "repository"})
@EntityScan("DataModel")
@EnableJpaRepositories(basePackages = "repository")
public class CloudliquidApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(CloudliquidApplication.class, args);
        System.out.println("Let's inspect the beans provided by Spring Boot:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

    @Bean
    public ProductService productService() {
        return new ProductServiceImpl();
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setForceEncoding(true);
        characterEncodingFilter.setEncoding("UTF-8");
        registrationBean.setFilter(characterEncodingFilter);
        return registrationBean;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatFactory() {
        return new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
            }
        };
    }
}

服务:

public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductRepository productRepository;

    @Override
    public List<Product> getAll() {
        return productRepository.findByName("Grape");
    }
}

服务(接口):

public interface ProductService {
    List<Product> getAll();
}

存储库(接口):

@Repository
public interface ProductRepository extends JpaRepository<Product,Long> {
    List<Product> findByName(String name);
}

控制器:

@RestController
public class HelloController {

    @Autowired
    private ProductService productService;


    @RequestMapping("/try")
    @ResponseBody
    public List the(){
        System.out.println("CALLLED");
        return productService.getAll();
    }

    @RequestMapping("/")
    public String index(){
        return "It's a CloudLiquid";
    }

浏览器出错:

    Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Dec 02 16:18:35 MSK 2018
There was an unexpected error (type=Not Found, status=404).
No message available

【问题讨论】:

  • 好吧,你扫描包“服务”和“存储库”,但你的控制器在 com.lopamoko.cloudliquid 中。你为什么不尊重约定,把所有东西都放在一个根包下,把主应用程序类放在那个根包里?
  • 是的!!! ,将Controller迁移到包控制器并添加到扫描中。

标签: java spring hibernate spring-boot spring-data


【解决方案1】:

首先你不需要使用所有这些注解

@SpringBootApplication(scanBasePackages = {"Service", "repository"})
@EntityScan("DataModel")
@EnableJpaRepositories(basePackages = "repository")

你甚至不需要使用scanBasePackages = {"Service", "repository"}。只有@SpringBootApplication 会处理所有这些。从主类中删除所有@Bean。 用注解编写服务类

@Service
public interface ProductService {
    List<Product> getAll();
}

并尝试点击/ 以获得预期的输出。

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 2015-07-04
    • 2019-05-07
    • 2018-02-14
    • 2016-02-16
    • 2021-04-20
    • 1970-01-01
    • 2023-01-07
    • 2021-12-08
    相关资源
    最近更新 更多