2017-05-12 5 views
3

저는 spring-boot-startter-data-rest와 spring-boot-starter-web을 사용하고 있습니다. CrudRepository를 사용하여 간단한 프로젝트를 만들었습니다. 스프링 부트가 나머지 요청 매핑을 생성하도록했습니다.스프링 부트 : 정적 컨텐츠와 별도 REST

나머지 클라이언트를 추가하려면 ./ 아래에 클라이언트를 추가하고 싶습니다. 따라서 접두어에 대한 경로는/api으로 전화를 걸려고합니다.

내가로부터 답변을 시도했다 : 파일 application.properties에 How to specify prefix for all controllers in Spring Boot? 사용하여 설정을

  • server.contextPath =/API/*
  • spring.data.rest.basePath =/API/*.

정적 콘텐츠 (예 : index.html, * .js, * .css)는 ./을 사용하여 가져 오지 않습니다. url에는 "/ api /"가 접두사로 붙습니다. 나머지 호출은/api/foos에서 제대로 제공됩니다.

src/main/resources/public에있는 소스로 이어지는 urls을 'rest-controllers'로 취급하지 않도록 스프링에게 알려줄 수 있습니까?
spring.data.rest.basePath =/API/*
작품을 완벽하게 속성을 설정

업데이트

. (이 설정을 재정의하는 샌드 박스에는 여전히 프로그래밍 방식의 빈 구성이 있습니다.)

+0

프런트 엔드에 사용중인 프레임 작업은 무엇입니까? thymeleaf, jsp 등 .... 당신은 @RestController와 같은 것을 원합니다. @RequestMapping ("/") public class IndexController { ... }. 따라서 localhost : 8080/(index.html이 올바르게 표시되어야 함)로 이동합니까? – Jesse

+0

안녕하세요 @ 제시, 프런트 엔드 용 AngularJS를 사용하고 있으므로 서버 측 기술이 필요하지 않습니다. 내가 추천하는 localhost : 8080/show index.html – highlysignificantbit

+0

AnuglarJS 앱을 별도의 프로젝트에 넣고 개발하는 동안 별도의 위치에서 제공하십시오. 즉, 더 많은 작업이 필요하지만 한 달 또는 두 달 안에 우수한 디자인과 대규모 툴링 개선에 배당금을 지불합니다. –

답변

0

스프링 컨트롤러는 HTML과 JSON/XML을 모두 지원합니다. 첫 번째 작업은 Spring MVC Views와 Thymeleaf와 같은 템플릿 엔진을 통해 수행되며, 후자는 Spring과 @RestController에 의해 전적으로 처리됩니다.

JSON 또는 XML 데이터를 반환하는 컨트롤러에만 컨텍스트 경로를 지정할 수있는 방법이 없으며 다른 컨트롤러에도 컨텍스트 경로를 지정할 수 없습니다. 정적 컨텐트에도 해당됩니다. 일반적으로 API에 대해 원하는 접두어를 포함하는 정적 변수와 컨트롤러의 @RequestMapping에서 사용하는 정적 변수가 있습니다. 즉

@RestController 
@RequestMapping(MyConstants.API_LATEST + "/bookings") 
public class MyBookingsController { 
    ... 
} 

어쨌든 이러한 접두사 문제를 접두어 문제에 접하는 것이 좋습니다. 적어도 오래 동안 변경 사항이있을 때 이전 API 버전을 지원해야하는 경우가 일반적입니다.

+0

안녕, @ gogstad. 저는 Spring을 처음 접했고 기본적인 백 엔드/프론트 엔드 설정 작업을하려고했습니다. 이 시점에서 CrudRepository를 사용하고 Spring이 요청/처리기 매핑을 처리 했으므로 Restcontroller 나 RequestMapping을 사용할 필요가 없다는 점에 유의하십시오. 그러나 스프링 부트는 컨벤션에 대한 관행을 촉진하고 있기 때문에, 휴식 서비스로 뒷받침되는 프런트 엔드 html 서버를 배치하기위한 일반적인 해결책이 있어야만하는 것처럼 보였습니다. 그래서, 나는 ** RestController **를 위해 Spring에게/api /로 경로를 접두어로 붙이고이 컨트롤러에 해당 경로를 매핑하는 설정을 찾고있었습니다. – highlysignificantbit

+0

(부산물 대신에 프론트 엔드를 백엔드에서 분리하는 것과 비교해 볼 때 직각 형으로 버전 관리를해야합니까?) – highlysignificantbit

+0

스프링 부트는 'public'또는 'static'경로에 너의 classpath. 'CrudRepository'에서 데이터에 접근하는 경우 url-to-crudrepository 메쏘드 매핑을 정의하기 위해 앞에 @Controller 또는 @ RestController에'@ RequestMapping'을 넣어야합니다; 나는 이것을위한 어떤 대회도 알지 못한다. 응용 프로그램의'@ RestControllers' 만 접두어로 붙이는 쉬운 방법은 없습니다. 버전 관리에 대한 요점은 API를 버전화해야한다면 (아마도) 결국 RequestMappings에서 정적 상수로 끝날 것입니다. API 접두사가있을 수도 있습니다. – gogstad

관련 문제