2016-08-20 38 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

回答

相关问题