How see the data of my data base H2, why localhost:8080/h2_console not work?

[亡魂溺海] 提交于 2019-12-11 00:56:52

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!