복붙노트

[SPRING] Spring REST 모의 컨텍스트 경로

SPRING

Spring REST 모의 컨텍스트 경로

다음 코드 스 니펫을 사용하여 spring rest mocks의 컨텍스트 경로를 설정하려고합니다.

private MockMvc mockMvc;

@Before
public void setUp() {
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
            .apply(documentationConfiguration(this.restDocumentation))
            .alwaysDo(document("{method-name}/{step}/",
                    preprocessRequest(prettyPrint()),
                    preprocessResponse(prettyPrint())))
            .build();
}

@Test
public void index() throws Exception {
    this.mockMvc.perform(get("/").contextPath("/api").accept(MediaTypes.HAL_JSON))
            .andExpect(status().isOk())
            .andExpect(jsonPath("_links.business-cases", is(notNullValue())));
}

그러나 다음과 같은 오류가 나타납니다.

java.lang.IllegalArgumentException: requestURI [/] does not start with contextPath [/api]

뭐가 잘못 되었 니? 예를 들어 코드에서 한 곳에서 contextPath를 지정할 수 있습니까? 빌더에서 직접?

여기 컨트롤러

@RestController
@RequestMapping(value = "/business-case", produces = MediaType.APPLICATION_JSON_VALUE)
public class BusinessCaseController {
    private static final Logger LOG = LoggerFactory.getLogger(BusinessCaseController.class);

    private final BusinessCaseService businessCaseService;

    @Autowired
    public BusinessCaseController(BusinessCaseService businessCaseService) {
        this.businessCaseService = businessCaseService;
    }

    @Transactional(rollbackFor = Throwable.class, readOnly = true)
    @RequestMapping(value = "/{businessCaseId}", method = RequestMethod.GET)
    public BusinessCaseDTO getBusinessCase(@PathVariable("businessCaseId") Integer businessCaseId) {
        LOG.info("GET business-case for " + businessCaseId);
        return businessCaseService.findOne(businessCaseId);
    }
}

해결법

  1. ==============================

    1.얻을 패스에 컨텍스트 경로를 포함시켜야합니다.

    얻을 패스에 컨텍스트 경로를 포함시켜야합니다.

    질문에 표시 한 경우 컨텍스트 경로는 / api이고 /에 요청하면 / api /를 전달해야합니다.

    @Test
    public void index() throws Exception {
        this.mockMvc.perform(get("/api/").contextPath("/api").accept(MediaTypes.HAL_JSON))
                .andExpect(status().isOk())
                .andExpect(jsonPath("_links.business-cases", is(notNullValue())));
    }
    
  2. ==============================

    2.많은 사람들이하는 일은 단순히 mockMvc 테스트에서 컨텍스트 경로를 사용하지 않는 것입니다. @RequestMapping URI 만 지정하면됩니다.

    많은 사람들이하는 일은 단순히 mockMvc 테스트에서 컨텍스트 경로를 사용하지 않는 것입니다. @RequestMapping URI 만 지정하면됩니다.

    @Test
    public void index() throws Exception {
        this.mockMvc.perform(get("/business-case/1234").accept(MediaTypes.HAL_JSON))
                .andExpect(status().isOk())
                .andExpect(jsonPath("_links.business-cases", is(notNullValue())));
    }
    
  3. from https://stackoverflow.com/questions/35435631/spring-rest-mock-context-path by cc-by-sa and MIT license