[英]Spring Data REST - HAL browser - returning HAL browser HTML rather than root of API
I am having a look into Spring Data REST, specifically the HAL browser. I have been following the documentation at http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_hal_browser .我一直在关注 http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_hal_browser上的文档。
When I navigate to http://localhost:8080
it redirects me (as expected) to http://localhost:8080/browser/index.html#/
, and the HAL browser is displayed.当我导航到http://localhost:8080
时,它会将我重定向(如预期)到http://localhost:8080/browser/index.html#/
,并显示 HAL 浏览器。 My issue is, rather than this page displaying details about the root of my API, it is trying to display itself. For example, the Response Body section has the HTML
of the HAL browser in it, not JSON
from my API.
I'm not sure if I have done something wrong in my setup - it is pretty vanilla (complete source listing below), so would appreciate any pointers in the right direction!我不确定我是否在我的设置中做错了什么 - 它非常普通(下面列出了完整的源代码),所以非常感谢任何正确方向的指示!
For completeness - if I enter /users
into the Explorer text field and select Go,. then I do see details of my API as expected, Furthermore, if I remove the HAL browser dependency and browse to http://localhost:8080
, then I see the root of my API as expected.然后我确实按预期看到了我的 API 的详细信息,此外,如果我删除了 HAL 浏览器依赖项并浏览到http://localhost:8080
,那么我按预期看到了我的 API 的根目录。
pom.xml pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample</groupId>
<artifactId>restsample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>My application</name>
<description>My application description</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Application.java应用.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
User.java用户.java
@Data
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
@NotBlank
@Size(min = 1, max = 100)
@Column(unique = true)
private String username;
}
UserRepository.java UserRepository.java
@RepositoryRestResource
public interface UserRepository extends CrudRepository<User, Long> {
User save(User user);
}
Try changing dependency from尝试从
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
to到
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-explorer</artifactId>
</dependency>
and then goto: http://localhost:8080然后转到:http://localhost:8080
A simple solution is to copy the hal-browser files for example from the repo: https://github.com/mikekelly/hal-browser in the一个简单的解决方案是复制 hal-browser 文件,例如从 repo: https : //github.com/mikekelly/hal-browser在
src/main/resources/static/
of your Spring Boot Application.您的 Spring Boot 应用程序。
Taking the information from the comments on the original question, the answer is as follows:从原问题的评论中获取信息,答案如下:
a-better-oliver:更好的奥利弗:
If you ask for HTML, then you get HTML
Me:我:
I should have used "Accept: application/hal+json", which does indeed return the correct data.
As one of the solution suggested in the same page like copy HAL browser files and all.作为同一页面中建议的解决方案之一,例如复制 HAL 浏览器文件等。 I don't want to make any complexity of that for using REST-HAL-Browser.我不想让使用 REST-HAL-Browser 变得如此复杂。
I have done a small R&D to know, how to configure REST-HAL-Browser with Springboot application and How to use it?我做了一个小的研发,知道如何使用 Springboot 应用程序配置 REST-HAL-Browser 以及如何使用它? in a simple and easy manner and made steps available to every one.以简单易行的方式,并为每个人提供步骤。 Even returning data, I am getting in the JSON format than the traditional HTML format.即使返回数据,我也使用 JSON 格式而不是传统的 HTML 格式。
In my application, I used SpringBoot-2.x version and below dependency for REST-HAL-browser.在我的应用程序中,我使用 SpringBoot-2.x 版本和以下依赖项用于 REST-HAL-browser。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
Look at hear for how did I configure and Used. 看看我是如何配置和使用的。
Note: It's better to configure Producer type as application/json along with path, if your method is returning something.注意:如果您的方法返回某些内容,最好将 Producer 类型配置为application/json以及路径。
If you are using Spring 2.2.X please just use with REST HAL browser just go to : http://localhost:8080/ instead of http://localhost:8080/browser .如果您使用的是 Spring 2.2.X,请与 REST HAL 浏览器一起使用,只需转到: http://localhost:8080/而不是http://localhost:8080/browser 。
Thanks谢谢
For future readers: HAL Browser is deprecated in newer versions of Spring Boot as per their Spring-Io GitHub issue.对于未来的读者:根据 Spring-Io GitHub 问题,在较新版本的 Spring Boot 中不推荐使用HAL 浏览器。
If you face issues with Hal Browser, please try using the Hal Explorer instead: https://mvnrepository.com/artifact/org.springframework.data/spring-data-rest-hal-explorer如果您在使用 Hal 浏览器时遇到问题,请尝试使用Hal Explorer : https : //mvnrepository.com/artifact/org.springframework.data/spring-data-rest-hal-explorer
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-explorer</artifactId>
</dependency>
More information can be found in this GitHub issue : Spring Boot 2.2 apps should use spring-data-rest-hal-explorer rather than spring-data-rest-hal-browser更多信息可以在这个 GitHub 问题中找到: Spring Boot 2.2 应用程序应该使用 spring-data-rest-hal-explorer 而不是 spring-data-rest-hal-browser
Changing the context path in Spring boot really messes spring-data-rest-hal-explorer.在 Spring 引导中更改上下文路径确实会弄乱 spring-data-rest-hal-explorer。 Expect /mycontext/explorer/index.html but get 404 instead.期望 /mycontext/explorer/index.html 但得到 404。
So I remove spring-data-rest-hal-explorer from pom.所以我从 pom.xml 中删除了 spring-data-rest-hal-explorer。 Then add:然后加:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>hal-explorer</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.42</version>
</dependency>
After that I can access hal explorer at: /mycontext/webjars/hal-explorer/index.html之后我可以访问 hal 资源管理器:/mycontext/webjars/hal-explorer/index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.