Spring MVC 调试SpringBoot MVC服务应用程序404错误

rqdpfwrv  于 2022-11-15  发布在  Spring
关注(0)|答案(2)|浏览(198)

我最近开发了一个Web应用程序,在过去的两周里,当我最终测试它的时候,可能是出于某种原因a a似乎甚至没有进入我必须返回JSON对象列表的方法。和一个允许我访问JSP文件的库。index.jsp出现了,但我几乎感觉Sping Boot 是免费提供的,因为它甚至没有输入that方法。这个问题我已经遇到几天了,但是我尝试自己解决它-我找到了另一个答案,建议在Spring类中放置一个断点,但是当我通过Eclipse“调试”它时,它甚至没有在该类中停止-关于模式匹配-一个答案建议在www. example中添加一个上下文 www.example.com :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

下面是我的Application类(带有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);
    }
}

我对Sping Boot 比较陌生,但以前从未遇到过这个问题,因为我在工作中使用它,它工作正常,但我们完全使用REST服务,我使用JSP文件以及用JSON响应的某种端点,但您无法通过JSP视图从REST服务响应,因此不幸的是,我无法复制工作项目以使其工作,否则我会 * 叹气 * 有什么想法,我可以让这个工作或什么我省略了?

tjrkku2a

tjrkku2a1#

我的猜测是,您将Spring和Sping Boot 中的内容混合在一起,这会在加载bean时遇到问题,因为您可能更改了注解加载顺序,或者加载了其他bean,而不是预期的Spring引导默认值。
我的建议是遵循以下指南:https://spring.io/guides/gs/spring-boot/
如果使用spring boot,则仅使用spring Boot 中的注解;如果使用spring,则仅使用spring中的注解(它们类似,但不完全相同,配置不同)。
无论如何,您可以使用ctx.getBeanDefinitionNames()方法检查Spring应用程序上下文中加载的bean(将其注入Application类),并查看您的控制器是否在那里(我猜没有)。

hfsqlsce

hfsqlsce2#

通过查看代码,我的第一印象是,您在这里有一些打字错误:

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

您的控制器类软件包名称为net.draconia.schedule.controllers
因此,请使用正确的软件包名称更正您的scanBasePackages。如果不是这样,请更新完整的堆栈跟踪以及您提交到应用程序中的GET请求。我们将查看并相应地更新答案。

相关问题