[英]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.