簡體   English   中英

調試 SpringBoot MVC 服務應用程序 404 錯誤

[英]Debugging SpringBoot MVC service application 404 error

我最近在過去 2 周內一直在開發的一個 Web 應用程序可能出於某種原因在我最終測試它時 - 似乎甚至不會進入我必須返回 JSON 對象列表的方法。 我已經包含了 Jackson 庫和 Spring Boot Web、Tomcat、Data-JPA、Hibernate、MySQL 和一個允許我訪問 JSP 文件的庫。 index.jsp 出現了,但我幾乎覺得 Spring Boot 給了我免費的,因為它甚至沒有進入那個方法。 我已經有幾天遇到這個問題,但試圖自己解決它 - 我找到了另一個答案,建議在其中一個 Spring 類中放置一個斷點,但是當我通過 Eclipse“調試”它時,它甚至沒有停在那堂課上-關於模式匹配的一些事情-一個答案建議向 application.properties 文件添加上下文-沒有幫助。 我已將其簡化為我認為可以做到的簡單。 誰能告訴我我可能做錯了什么? 在我的代碼之前,該項目位於 Github 上: https ://github.com/sfulmer/Scheduler.git

這是我的控制器:

package net.draconia.schedule.controllers;

import java.util.List;

import net.draconia.schedule.beans.Event;

import net.draconia.schedule.dao.EventDAO;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class ScheduleController
{
    private static final Logger logger = LoggerFactory.getLogger(ScheduleController.class);
    
    @Autowired
    private EventDAO mObjDAO;
    
    protected EventDAO getDAO()
    {
        return(mObjDAO);
    }
    
    //@GetMapping("/events")
    @RequestMapping(value = "events", method = RequestMethod.GET)
    public @ResponseBody List<Event> getEvents()
    {
        logger.debug("I got here");
        
        return(getDAO().getList());
    }
    
    @GetMapping("/")
    public String index()
    {
        return("index");
    }
}

這是 DAO 接口 - 如果需要,我將顯示該類,但這是控制器查看的內容:

package net.draconia.schedule.dao;

import java.util.List;

import javax.persistence.EntityNotFoundException;

import net.draconia.schedule.beans.Event;

public interface EventDAO
{
    public Event getEventById(final long lId) throws EntityNotFoundException;
    public List<Event> getList();
    public void remove(final Event objEvent);
    public void removeById(final long lId);
    public Event save(final Event objEvent);
}

Event 類很長,但如果我需要包含它,我會的。 application.properties 文件在這里:

spring.datasource.url = jdbc:mysql://localhost:3306/schedule
spring.datasource.username = root
spring.datasource.password = R3g1n@ M1lL$ 1$ My Qu3eN!
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
server.servlet.contextPath=/scheduler

這是我的應用程序類(帶有 SpringBootApplication 注釋):

package net.draconia.schedule;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication(scanBasePackages = {"net.draconia.schedule.controller"})
public class ScheduleApp implements WebMvcConfigurer
{
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
    {
        return(builder.sources(ScheduleApp.class));
    }
    
    public static void main(String[] args)
    {
        SpringApplication.run(ScheduleApp.class, args);
    }
}

我對 Spring Boot 比較陌生,但以前從未遇到過這個問題,因為我在工作中使用它並且工作正常,但我們在那里完全使用 REST 服務,我正在使用 JSP 文件以及排序端點用 JSON 響應,但你不能用 JSP 視圖從 REST 服務響應,所以不幸的是我不能復制工作的項目來讓它工作,或者我會感嘆關於如何讓這個工作或我省略什么的任何想法?

我的猜測是,您正在混合 Spring 和 Spring Boot 中的內容,並且在加載 bean 時遇到問題,因為您可能正在更改注釋加載順序或加載其他 bean,而不是預期的 Spring Boot 默認值。 例如,您implements WebMvcConfigurer ,但您沒有提供任何 WebMvc 配置,例如ViewResolver bean

我的建議是遵循本指南: https ://spring.io/guides/gs/spring-boot/

如果使用 spring boot,則僅使用 spring boot 中的注釋,如果使用 spring,則僅使用 spring(它們相似,但不完全相同,配置不同)。

無論如何,您可以使用ctx.getBeanDefinitionNames()方法檢查 Spring 應用程序上下文中加載的 bean(在 Application 類中注入它)並查看您的控制器是否在那里(我猜不是)。

通過查看代碼,我的第一印象是,您在這里有一些錯字:

@SpringBootApplication(scanBasePackages = {"net.draconia.schedule.controller"})

您的控制器類包名稱具有net.draconia.schedule.controllers

那么您能否使用正確的包名稱更正您的scanBasePackages 如果不是這種情況,請更新完整的堆棧跟蹤以及您提交到應用程序的GET請求。 將查看並相應地更新答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM