5

大家好,即使我已经按照他们网站上的 spring 教程进行操作,我仍然会收到此错误。我一直在试图弄清楚为什么我会收到这个错误。我能够连接到 facebook,但是当尝试像 spring 提供的教程那样检索提要时,我不断收到白标签错误。它说:

此应用程序没有显式映射 /error,因此您将其视为后备。出现意外错误(类型=未找到,状态=404)。没有可用的消息

一切似乎都很好,但不知道为什么我不断收到此错误。如果有人可以提供帮助,我将不胜感激。

我的控制器放在 src/main/java/home 中:

@Controller
@RequestMapping(value="/")
public class HomeController {

private Facebook facebook;

@Inject
public HomeController(Facebook facebook) {
    this.facebook = facebook;
}

@RequestMapping( method =RequestMethod.GET)
public String getPhotos(Model model){

    if(!facebook.isAuthorized())
    {
        return "redirect:/connect/facebook";
    }
    model.addAttribute(facebook.userOperations().getUserProfile());
    PagedList<Post> homeFeed = facebook.feedOperations().getHomeFeed();
    model.addAttribute("feed", homeFeed);

    return "hello";
 }
}

Application.java 文件放在 src/main/java/home/main 中:

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

下面是我的 build.gradle 文件:

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'

buildscript{
repositories{
   // maven { url "https://repo.spring.io/release" }
    maven { url "https://repo.spring.io/libs-milestone"}
   // mavenCentral()
      }
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE")
  }
 }
repositories {
   maven { url "https://repo.spring.io/libs-milestone"}
   mavenCentral()
 }
bootRepackage {
  mainClass = 'facebookArchiver.Application'
}
 dependencies {
  compile ('org.springframework.social:spring-social-facebook:2.0.0.RELEASE')
  compile("org.springframework.boot:spring-boot-starter-thymeleaf")
  compile('org.springframework.boot:spring-boot-starter-web')
  testCompile group: 'junit', name: 'junit', version: '4.11'
 }
 task wrapper(type: Wrapper) {
      gradleVersion = '2.3'
 }

hello.html 文件:它保存在 src/main/resources/templates 文件夹中:

<html>
 <head>
<title>Hello Facebook</title>
</head>
<body>
 <h3>Hello, <span th:text="${facebookProfile.name}">Some User</span>!</h3>

 <h4>Here is your home feed:</h4>

 <div th:each="post:${feed}">
 <b th:text="${post.from.name}">from</b> wrote:
 <p th:text="${post.message}">message text</p>
 <img th:if="${post.picture}" th:src="${post.picture}"/>
 <hr/>
 </div>
</body>
</html>

facebookConnect.html:它存储在 src/main/resources/templates/connect 文件夹下:

 <html>
 <head>
 <title>Hello Facebook</title>
 </head>
 <body>
  <h3>Connect to Facebook</h3>

  <form action="/connect/facebook" method="POST">
<input type="hidden" name="scope" value="read_stream" />
  <div class="formInfo">
    <p>You aren't connected to Facebook yet. Click the button to connect  this application with your Facebook account.</p>
 </div>
 <p><button type="submit">Connect to Facebook</button></p>
</form>
</body>
</html>

最后是 facebookConnected.html: 也存储在 src/main/resources/templates/connect 文件夹下: 下面是 facebookConnected.html 的文件:

<html>
<head>
  <title>Hello Facebook</title>
</head>
  <body>
   <h3>Connected to Facebook</h3>
   <p>
     You are now connected to your Facebook account.
    Click <a href="/">here</a> to see some entries from your Facebook photos.
  </p>
</body>
</html>
4

4 回答 4

31

如果您的控制器在不同的包结构中,则@ComponentScan需要将其添加到Spring Boot应用程序class中。

例子 :

@ComponentScan(basePackages={"package name of where the controller is"})
于 2015-05-07T12:52:10.163 回答
2

If you put the Controllers & Repositories in different packages,

then @ComponentScan and @EnableMongoRepositories annotation, we have to give the full package name of the controller & repository.

@ComponentScan(basePackages={"package name of controller", "package name of repository"})
@EnableMongoRepositories("package name of repository")
于 2017-02-01T21:25:53.620 回答
0

您可以尝试使用以下

@RestController and produces = MediaType.APPLICATION_JSON_VALUE

例如

@RestController
public class MyController

@GetMapping(value = "/xyz/{ab}", produces = MediaType.APPLICATION_JSON_VALUE)
于 2017-10-31T09:35:19.957 回答
0

我遇到了同样的白标错误。我花了几个小时才弄清楚实际上百里香依赖没有得到正确解决。解决方案既简单又愚蠢。

  1. 停止Tomcat。
  2. 右键单击项目。
  3. Gradle -> 刷新 gradle 项目(或 maven 的类似步骤)
  4. 启动tomcat。
  5. 如果这不起作用,请更改 build.gradle 中下一行的位置(向上或向下移动),然后执行上述步骤。

    编译('org.springframework.boot:spring-boot-starter-thymeleaf')

重要的部分是,您必须在 Tomcat 未运行时更新您的项目。如果我们使用 devtools,我们会盲目地依赖它来重新启动我们的 servlet 容器和其他东西,但有时手动启动停止会很方便。

于 2018-07-16T21:01:08.140 回答