繁体   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. 我一直在关注 http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_hal_browser上的文档。

当我导航到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.

响应体截图

我不确定我是否在我的设置中做错了什么 - 它非常普通(下面列出了完整的源代码),所以非常感谢任何正确方向的指示!

For completeness - if I enter /users into the Explorer text field and select Go,. 然后我确实按预期看到了我的 API 的详细信息,此外,如果我删除了 HAL 浏览器依赖项并浏览到http://localhost:8080 ,那么我按预期看到了我的 API 的根目录。

Screenshot of response when not using HAL browser

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>

应用.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

用户.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

@RepositoryRestResource
public interface UserRepository extends CrudRepository<User, Long> {
    User save(User user);
}

尝试从

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-rest-hal-explorer</artifactId>
</dependency>

然后转到:http://localhost:8080

一个简单的解决方案是复制 hal-browser 文件,例如从 repo: https : //github.com/mikekelly/hal-browser

src/main/resources/static/

您的 Spring Boot 应用程序。

从原问题的评论中获取信息,答案如下:

更好的奥利弗:
If you ask for HTML, then you get HTML

我:
I should have used "Accept: application/hal+json", which does indeed return the correct data.

作为同一页面中建议的解决方案之一,例如复制 HAL 浏览器文件等。 我不想让使用 REST-HAL-Browser 变得如此复杂。

我做了一个小的研发,知道如何使用 Springboot 应用程序配置 REST-HAL-Browser 以及如何使用它? 以简单易行的方式,并为每个人提供步骤。 即使返回数据,我也使用 JSON 格式而不是传统的 HTML 格式。

在我的应用程序中,我使用 SpringBoot-2.x 版本和以下依赖项用于 REST-HAL-browser。

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>

看看我是如何配置和使用的。

注意:如果您的方法返回某些内容,最好将 Producer 类型配置为application/json以及路径。

如果您使用的是 Spring 2.2.X,请与 REST HAL 浏览器一起使用,只需转到: http://localhost:8080/而不是http://localhost:8080/browser

谢谢

对于未来的读者:根据 Spring-Io GitHub 问题,在较新版本的 Spring Boot 中不推荐使用HAL 浏览器。

如果您在使用 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>

更多信息可以在这个 GitHub 问题中找到: Spring Boot 2.2 应用程序应该使用 spring-data-rest-hal-explorer 而不是 spring-data-rest-hal-browser

在 Spring 引导中更改上下文路径确实会弄乱 spring-data-rest-hal-explorer。 期望 /mycontext/explorer/index.html 但得到 404。

所以我从 pom.xml 中删除了 spring-data-rest-hal-explorer。 然后加:

        <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>

之后我可以访问 hal 资源管理器:/mycontext/webjars/hal-explorer/index.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM