web-dev-qa-db-ja.com

スプリングブーツホワイトラベル404

こんにちはみんな私は彼らのウェブサイトから春のチュートリアルに従ったのに私はこのエラーを受け取り続けます。私はなぜこのエラーが発生するのかを理解しようとしています。 Facebookに接続できますが、春に提供されたチュートリアルのようにフィードを取得しようとすると、ホワイトラベルエラーが発生し続けます。それは言う:

このアプリケーションには/ errorの明示的なマッピングがないため、これはフォールバックと見なされます。予期しないエラーが発生しました(type = Not Found、status = 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";
 }
}

Src/main/Java/home/mainに配置されたApplication.Javaファイル:

@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>
5
Jenn Fitz

コントローラが別のパッケージ構造にある場合は、@ComponentScanSpring Bootアプリケーションclassに追加する必要があります。

例:

@ComponentScan(basePackages={"package name of where the controller is"})
31
Shano

コントローラとリポジトリを異なるパッケージに入れる場合、

次に@ ComponentScanおよび@ EnableMongoRepositoriesアノテーション、コントローラーとリポジトリの完全なパッケージ名を指定する必要があります。

@ComponentScan(basePackages={"package name of controller", "package name of repository"})
@EnableMongoRepositories("package name of repository")
2
Avijit Karmakar

同じホワイトラベルエラーが発生していました。実際にthymeleafの依存関係が適切に解決されていないことを理解するのに数時間かかりました。解決策は非常に単純で、どちらもばかげていました。

  1. Tomcatを停止します。
  2. プロジェクトを右クリックします。
  3. Gradle-> Gradleプロジェクトの更新(またはMavenの同様の手順)
  4. Tomcatを起動します。
  5. それでも問題が解決しない場合は、build.gradleで下の行の位置を変更し(上または下に移動)、上記の手順を実行します。

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

重要なのは、Tomcatが実行されていないときにプロジェクトを段階的に更新する必要があるということです。 devtoolsを使用する場合、サーブレットコンテナなどを再起動するために盲目的に依存しますが、手動の開始停止が便利な場合があります。

あなたは以下を使用することを試みることができます

@RestController and produces = MediaType.APPLICATION_JSON_VALUE

例えば

@RestController
public class MyController

@GetMapping(value = "/xyz/{ab}", produces = MediaType.APPLICATION_JSON_VALUE)
0
Amit Datta