Spring为有效URL生成404

时间:2016-09-23 10:05:22

标签: java spring maven spring-mvc

我正在构建一个简单的Spring应用程序,目的是返回" Hello world"作为建立在基础上的基础。我昨晚在this指南之后设置了一个干净的项目,该指南有效,现在我试图将现有的项目带到相同的功能。

我有两个名为ApplicationConfig.javaController.java的文件,其任务是在遇到某个网址时返回一个字符串。当我访问localhost:8080时,它会向我的index.html呈现指向我希望返回字符串的URL的链接。当我访问网址localhost:8080/home/greet时,它会返回404。

我的ApplicationConfig.java

package application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ApplicationConfig {

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

}

和我的Controller.java

package controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/home")
public class Controller {

    @RequestMapping("/greet")
    public String greeting() {
        return "Hello";
    }
}

据我所知/home/greet/应该生成一个只读取" Hello"但事实并非如此。有什么问题?

这是我的pom.xml以及我的项目结构,如果它们相关的话。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-rest-service</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

structure

2 个答案:

答案 0 :(得分:3)

您的入口点类application位于Controller.java个包中,controller位于application个包中。

SpringBoot扫描EntryPoint类所在的包(和子包)中的Spring组件。

然后将您的控制器移至applicationusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; namespace ConsoleApplication14 { class Program { const string FILENAME = @"c:\temp\test.xml"; static void Main(string[] args) { XDocument doc = XDocument.Load(FILENAME); string name = "P:class1.clsPerson.isAlive"; XElement person = doc.Descendants("member").Where(x => (string)x.Attribute("name") == name).FirstOrDefault(); person.Add(new object[] { new XElement("Description", "Whether the object is alive or dead"), new XElement("StandardValue", false) }); } } } 下的任何嵌套包。

答案 1 :(得分:0)

第1步:在package abc.app;

中添加 ApplicationConfig.java

第2步:在package abc.app.controller;中添加 Controller.java

第3步:在 ApplicationConfig.java 中添加@ComponentScan("abc.app")

例如:

<强> ApplicationConfig.java:

package abc.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@ComponentScan("abc.app")
public class ApplicationConfig {

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

}

Controller.java:

package abc.app.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {

@RequestMapping("/greet")
public String greeting() {
    return "Hello";
  }
}

我希望你在这里找到合适的解决方案。