简体   繁体   English

Spring Data REST - HAL browser - returning HAL browser HTML rather than root of API

[英]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 的根目录。

Screenshot of response when not using HAL browser

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 Explorerhttps : //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.

相关问题 如何在 Spring 引导数据 rest 中禁用 hal 浏览器 - How to disable hal browser in Spring Boot data rest 添加 HAL 浏览器时出错:找不到依赖项 'org.springframework.data:spring-data-rest-hal-browser:' - An error while adding HAL Browser: Dependency 'org.springframework.data:spring-data-rest-hal-browser:' not found 普通JSON(非HAL格式)的Spring Data REST - Spring Data REST in plain JSON (not HAL format) Spring Data Rest - 在 Json 中禁用自我链接(HAL) - Spring Data Rest -Disable self links(HAL) in Json Spring-boot + REST + HATEOAS + HAL - Spring-boot + REST + HATEOAS + HAL 当包含spring数据rest时,Spring以纯JSON而不是HAL格式返回Resource - Spring returns Resource in pure JSON not in HAL Format when including spring data rest 在 spring-data-rest HAL _links 中将 UUID 编码更改为 base-32 - Change UUID encoding to base-32 in spring-data-rest HAL _links 将Spring Data Rest JPA实体保存在自定义控制器中,并返回HAL表示形式 - Save a Spring Data Rest JPA entity in a custom controller and return a HAL representation 由于spring-data-rest中的HAL“_links”元素导致restdocs SnippetException - restdocs SnippetException due to HAL “_links” elements from spring-data-rest Spring-data-rest在hal + json和plain json之间切换 - Spring-data-rest switch between hal+json and plain json
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM