我正在查看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);
}
如果你問HTML,那麼你會得到HTML。 – zeroflagL
感謝您的回覆 - 但是,即使我將application/json + hal內容類型頭添加到HAL瀏覽器的「自定義請求頭」部分,我仍然會將HAL瀏覽器本身作爲響應返回。此外,文檔中絕對沒有表明應該需要這樣做(並且我見過的有關正在運行的HAL瀏覽器的任何示例似乎也不需要傳遞內容類型標頭)。 – user2455157
我的錯誤是,我應該使用「Accept:application/hal + json」,它確實會返回正確的數據。所以,我猜這個問題是Spring引導包將重定向到HAL瀏覽器的方式與API所在的終端相同,因此默認情況下它不能按預期工作。 – user2455157