问题
Hello guys I keep getting this error even though I have followed spring tutorial from their website. I have been trying to figure it out why I'm getting this error. I am able to connect to facebook but when trying to retrieve the feeds like the tutorial provided by spring, I keep getting a whitelabel error. It says:
This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Not Found, status=404). No message available
Everything seems to be okay but dont know why I keep getting this error. if someone can assist I will appreciate it.
My controller placed in 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 file placed in src/main/java/home/main:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Below is my build.gradle file:
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 file: It's saved in src/main/resources/templates folder:
<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: it's stored under src/main/resources/templates/connect folder:
<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>
And finally facebookConnected.html: also stored under src/main/resources/templates/connect folder: Below is the file for 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>
回答1:
If your controllers are in a different package structure, then @ComponentScan
needs to be added to the Spring Boot
application class
.
Example :
@ComponentScan(basePackages={"package name of where the controller is"})
回答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")
回答3:
You can try to use the following
@RestController and produces = MediaType.APPLICATION_JSON_VALUE
For example
@RestController
public class MyController
@GetMapping(value = "/xyz/{ab}", produces = MediaType.APPLICATION_JSON_VALUE)
回答4:
I was having the same white label error. Took me couple of hours to figure out that actually thymeleaf dependency wasn't getting resolved properly. The solution was pretty simple and silly both.
- Stop tomcat.
- Right click on the project.
- Gradle -> Refresh gradle project (Or similar step for maven)
- Start tomcat.
If that doesn't work, change the position of below line in build.gradle (move up or down), and perform above steps.
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
The important part is, you have to gradle refresh your project while tomcat is NOT running. If we use devtools, we depend on it blindly for restarting our servlet container and stuffs, but sometimes a manual start stop comes handy.
来源:https://stackoverflow.com/questions/29870852/spring-boot-whitelabel-404