Spring数据REST - HAL浏览器 - 返回HAL浏览器HTML而不是API的根
问题描述:
我正在查看Spring Data REST,特别是HAL浏览器。我一直在关注文档http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_hal_browser。Spring数据REST - HAL浏览器 - 返回HAL浏览器HTML而不是API的根
当我导航到http://localhost:8080
时,它会将我(如预期的)重定向到http://localhost:8080/browser/index.html#/
,并显示HAL浏览器。我的问题是,而不是此页面显示有关我的API的根的详细信息,它试图显示自己。例如,Response Body部分的HAL浏览器中有HTML
,而不是我的API中的JSON
。
我不知道如果我做错了,我的设置 - 这是相当香草(以下完整的源列表),所以才会在正确的方向欣赏任何指针!
为了完整性 - 如果我进入/users
到浏览器文本字段,然后选择Go!然后我看到我的API的细节如预期。此外,如果我删除HAL浏览器依赖关系并浏览到http://localhost:8080
,那么我会看到我的API的根目录。
的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
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
User.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);
}
答
一个简单的解决方案是将HAL浏览器文件从回购复制例如: https://github.com/mikekelly/hal-browser在
src/main/resources/static/
启动应用程序
如果你问HTML,那么你会得到HTML。 – zeroflagL
感谢您的回复 - 但是,即使我将application/json + hal内容类型头添加到HAL浏览器的“自定义请求头”部分,我仍然会将HAL浏览器本身作为响应返回。此外,文档中绝对没有表明应该需要这样做(并且我见过的有关正在运行的HAL浏览器的任何示例似乎也不需要传递内容类型标头)。 – user2455157
我的错误是,我应该使用“Accept:application/hal + json”,它确实会返回正确的数据。所以,我猜这个问题是Spring引导包将重定向到HAL浏览器的方式与API所在的终端相同,因此默认情况下它不能按预期工作。 – user2455157