我想查看数据库h2中的数据。我不知道我错了 我在.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
当我用Chrome http://localhost:8080/h2_console发出请求时 我收到此错误:
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
这是我的控制器:
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);
}
}
使用此http://localhost:8080/user/
时,我会从控制器收到此消息
Hello World!
这是我的项目路径:
C:\Users\DELL\Desktop\txts\aquiesta\springTeam\traslateInClick\src\main\resources\application.properties
这是我的仓库https://github.com/hubmanS/traslateInClick
这是我的依赖。
<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>
答案 0 :(得分:2)
您的GET方法之一引起了URL映射冲突
@GetMapping(path = {"/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
h2_console
将作为字符串映射到getBook
方法,并由于您的方法仅接受int而引发异常。 With RESTful naming strategy in mind,您应该将映射更改为:
@GetMapping(path = {"/books/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
答案 1 :(得分:2)
根据下面的代码,您的上下文路径也似乎是“”(空白)。
@RestController
@RequestMapping({"/"})
public class MeetController{
...
}
根据控制器类中的代码,问题仅在于您的URL映射。您的URL /h2_console
与/{id}
方法的getBook
URL发生冲突。
@GetMapping(path = {"/{id}"})
public Meet getBook(@PathVariable("id") int id) {
return null;
}
我建议您为应用程序添加正确的上下文路径,以使应用程序URL不会与h2-console
URL冲突。上面的配置有时会运行,而其他时候会失败。如果注册了h2数据库上下文URL,您的控制台将打开;如果注册失败,则会显示您正在获取的错误页面。
推荐的解决方案:
application.properties(注释其他h2属性,因为它们是默认属性)
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;
}
}
因此您的最终到达网址为:
要获取该书:http://localhost:8080/book/ {id} /
要创建一本书,请:http://localhost:8080//create/ {名称} /作者/ {id} /
致电给家里:http://localhost:8080/book/
要访问h2数据库控制台:http://localhost:8080/h2_console/login.jsp