2016-08-20 61 views
2

我正在查看Spring Data REST,特別是HAL瀏覽器。我一直在關注文檔http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_hal_browserSpring數據REST - HAL瀏覽器 - 返回HAL瀏覽器HTML而不是API的根

當我導航到http://localhost:8080時,它會將我(如預期的)重定向到http://localhost:8080/browser/index.html#/,並顯示HAL瀏覽器。我的問題是,而不是此頁面顯示有關我的API的根的詳細信息,它試圖顯示自己。例如,Response Body部分的HAL瀏覽器中有HTML,而不是我的API中的JSON

Screenshot of Response body

我不知道如果我做錯了,我的設置 - 這是相當香草(以下完整的源列表),所以纔會在正確的方向欣賞任何指針!

爲了完整性 - 如果我進入/users瀏覽器文本字段,然後選擇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> 

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); 
} 
+1

如果你問HTML,那麼你會得到HTML。 – zeroflagL

+0

感謝您的回覆 - 但是,即使我將application/json + hal內容類型頭添加到HAL瀏覽器的「自定義請求頭」部分,我仍然會將HAL瀏覽器本身作爲響應返回。此外,文檔中絕對沒有表明應該需要這樣做(並且我見過的有關正在運行的HAL瀏覽器的任何示例似乎也不需要傳遞內容類型標頭)。 – user2455157

+0

我的錯誤是,我應該使用「Accept:application/hal + json」,它確實會返回正確的數據。所以,我猜這個問題是Spring引導包將重定向到HAL瀏覽器的方式與API所在的終端相同,因此默認情況下它不能按預期工作。 – user2455157

回答

相關問題