问题
I want to see the data in my database h2. I do not know what I'm wrong about I have this configuration in file .properties
spring.h2.console.enabled=true
spring.h2.console.path=/h2_console
spring.datasource.url=jdbc:h2:file:~/test
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
#spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.ddl-auto = update
#spring.jpa.hibernate.hbm2ddl.auto:validate
when i make a request in chrome http://localhost:8080/h2_console i get this error:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri May 10 00:37:28 BOT 2019
There was an unexpected error (type=Not Found, status=404).
No message available
this my controller:
package com.example.demo.controller;
import com.example.demo.model.Friendship;
import com.example.demo.model.User;
import com.example.demo.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.logging.Logger;
@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@RestController
@RequestMapping({"/user"})
public class UserController {
@Autowired
UserServiceImpl userServiceImpl;
static Logger log = Logger.getLogger(UserController.class.getName());
@GetMapping(path = {"/"})
public Meet getBook() {
log.info("HELLO WORDL");
return null;
}
@PostMapping("/create")
public ResponseEntity<User> createUser(@RequestBody User user) {
log.info("CREATE");
return new ResponseEntity<User>(userServiceImpl.createUser(user), HttpStatus.OK);
}
@PostMapping("/addFriend")
public ResponseEntity<User> getUser(@RequestParam("owner") Long ownerId, @RequestParam("friend") Long friendId) {
return new ResponseEntity<User>(userServiceImpl.createLinkWithFriends(ownerId, friendId), HttpStatus.OK);
}
@GetMapping("/owner/{id}/friends")
public ResponseEntity<List<User>> getFriendsOf(@PathVariable("id") Long ownerId) {
return new ResponseEntity<List<User>>(userServiceImpl.getFriendsOf(ownerId), HttpStatus.OK);
}
@GetMapping("/getUsers")
public ResponseEntity<List<User>> getUsers() {
log.info("getUser");
return new ResponseEntity<>(userServiceImpl.getUsers(), HttpStatus.OK);
}
@GetMapping("/showFriends/{id}")
public ResponseEntity<List<User>> getUsers(@PathVariable("id") int id) {
log.info("showFriends"+id);
return new ResponseEntity<>(userServiceImpl.getUsers(), HttpStatus.OK);
}
}
When I use this http://localhost:8080/user/ I get this message from the controller
Hello World!
this is my path of my project:
C:\Users\DELL\Desktop\txts\aquiesta\springTeam\traslateInClick\src\main\resources\application.properties
this is my repo https://github.com/hubmanS/traslateInClick
this is my dependency.
<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.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
回答1:
According to the code below looks like your context path is also "" (blank).
@RestController
@RequestMapping({"/"})
public class MeetController{
...
}
And according to code in the controller class, the issue is with your URL mapping only. Your URL /h2_console is getting conflicted with /{id} URL of getBook method.
@GetMapping(path = {"/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
I would suggest you add the correct context path for your application so that your application URL will not get conflicted with h2-console URL. The above configurations are sometimes running and failing other times. Your console will open if h2 database context URL gets registered, if it fails to get register, you will get the error page you are getting right now.
Recommended Solution :
application.properties (Commenting other h2 attributes as they are default)
spring.h2.console.enabled=true
#spring.h2.console.path=/h2_console
spring.datasource.url=jdbc:h2:file:~/test
#spring.datasource.username=sa
#spring.datasource.password=
#spring.datasource.driverClassName=org.h2.Driver
spring.jpa.show-sql=true
#spring.jpa.generate-ddl=true
#spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.ddl-auto = update
MeetController:
package com.example.demo.controller;
import com.example.demo.model.Meet;
import com.example.demo.service.MeetServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping({"/book"})
public class MeetController {
@Autowired
MeetServiceImpl bookService;
@RequestMapping("")
public String home(){
return "Hello World!";
}
@GetMapping(path = {"/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
@PostMapping("/create/{name}/author/{id}")
public ResponseEntity<Meet> createBook() {
return null;
}
}
So your final URLs will be :
To get the book: http://localhost:8080/book/{id}/
To create a book: http://localhost:8080//create/{name}/author/{id}/
To call home: http://localhost:8080/book/
To access h2 DB Console: http://localhost:8080/h2_console/login.jsp
回答2:
You have a URL mapping conflict caused by one of your GET method
@GetMapping(path = {"/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
h2_console would be mapped to getBook method as a string, and throws an exception as your method only accepts int. With RESTful naming strategy in mind, you should change your mapping to:
@GetMapping(path = {"/books/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
来源:https://stackoverflow.com/questions/55978384/how-see-the-data-of-my-data-base-h2-why-localhost8080-h2-console-not-work