2016-08-20 3 views
2

HAL 브라우저와 관련된 스프링 데이터 REST를 살펴보고 있습니다. 나는 http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_hal_browser에있는 문서를 따라왔다.스프링 데이터 REST - HAL 브라우저 - API 루트가 아닌 HAL 브라우저 HTML을 반환합니다.

http://localhost:8080으로 이동하면 예상대로 나를 http://localhost:8080/browser/index.html#/으로 리디렉션하고 HAL 브라우저가 표시됩니다. 내 문제는 내 API의 루트에 대한 세부 정보를 표시하는이 페이지가 아니라 자체를 표시하려고하는 것입니다. 예를 들어 응답 본문 섹션에는 내 API에서 JSON이 아니라 HAL 브라우저가 HTML 개 있습니다. 꽤 바닐라 (완전한 소스 아래 목록), 그래서 올바른 방향으로 어떤 포인터를 감사하겠습니다 -

Screenshot of Response body

난 내 설정에서 뭔가 잘못 한 경우 확실하지 않다!

완성도를 들어

- 나는 탐색기 텍스트 필드에 /users를 입력하고 이동을 선택하면!, 나는 예상대로 내 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 간단한 솔루션은 REPO에서 예를 들어, 복도 브라우저 파일을 복사하는 것입니다

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

HTML을 요청하면 HTML이 표시됩니다. – zeroflagL

+0

답장을 보내 주셔서 감사합니다. 그러나 HAL 브라우저의 "Custom Request Headers"섹션에 application/json + hal 콘텐츠 유형 헤더를 추가하더라도 여전히 응답으로 HAL 브라우저가 반환됩니다. 또한 문서에 이것이 필요하다는 표시는 전혀 없습니다 (그리고 실행중인 HAL 브라우저에서 본 예는 내용 유형 헤더도 전달하지 않아도됩니다). – user2455157

+0

실수로 올바른 데이터를 반환하는 "Accept : application/hal + json"을 사용해야했습니다. 따라서 스프링 부트 패키지가 API와 동일한 끝점에서 HAL 브라우저로 리디렉션하는 방식이므로 문제가 예상대로 작동하지 않습니다. – user2455157

답변