2016-09-15 4 views
0

나머지 API 중 하나를 테스트하기 위해 하나의 Spring Junit 클래스를 만듭니다. 하지만 전화를 걸면 404가 반환되고 테스트 케이스가 실패합니다. JUnit 테스트 클래스는 다음과 같습니다Spring Junit 테스트는 404 오류 코드를 반환합니다

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(locations={"classpath:config/spring-commonConfig.xml"}) 
public class SampleControllerTests { 

public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(
     MediaType.APPLICATION_JSON.getType(), 
     MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); 

private MockMvc mockMvc; 
@Autowired 
private WebApplicationContext webApplicationContext; 

@Before 
public void setup() { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 
} 

@Test 
public void testSampleWebService() throws Exception { 
    mockMvc.perform(post("/sample/{userJson}", "{\"id\":\"102312121\",\"text\":\"Hi user\",\"key\":\"FIRST\"}")) 
    .andExpect(status().isOk()) 
    .andExpect(jsonPath("$result", is("Hello "))) 
    .andExpect(jsonPath("$answerKey", is(""))); 
} 
} 

RestController 클래스는 다음과 같습니다

@RestController 
public class SampleController { 

private static final Logger logger = LoggerFactory.getLogger(SampleController.class); 
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").create(); 

@Autowired private SampleService sService; 


@RequestMapping(value = "${URL.SAMPLE}", method = RequestMethod.POST) 
@ResponseBody 
public String sampleWebService(@RequestBody String userJson){ 
    String output=""; 
    try{ 
     output = sService.processMessage(userJson); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return output; 
} 
} 

내가 속성 파일의 URL 문자열을로드하고 있습니다. 이 방법은 컨트롤러 클래스에서 URL을 하드 코딩하지 않고 동적으로 매핑했기 때문에 아래에서 언급 한 클래스를 통해 속성 파일을로드하는 이유입니다.

"URL.SAMPLE =/샘플/{userJson}"

URL을 정의하는 속성 파일을 판독하고 분류 :

@Configuration 
@PropertySources(value = { 
    @PropertySource("classpath:/i18n/urlConfig.properties"), 
    @PropertySource("classpath:/i18n/responseConfig.properties") 
}) 
public class ExternalizedConfig { 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 
} 

에러 코드 (404 개) 수단과, 그것을 서버에 연결되어 있지만 요청한 소스를 가져 오지 못했습니다. 아무도 정확하게 문제가 무엇인지 말해 줄 수 있습니까?

감사합니다, 아툴

당신은 요청 본문이 @RequestBody를 사용하는 구문 분석 JSON 입력을 시도하는

답변

0

답장을 보내 주셔서 감사합니다.

내가 제안한 내용을 변경했지만 오류가 여전히 지속됩니다.

다시 오류로 검색하여 해결책을 찾았습니다.

봄 xml 파일을 변경했습니다. Like :

mvc의 xml 파일에 namespace를 추가하십시오.

xmlns:mvc="http://www.springframework.org/schema/mvc" 

http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd 

    <context:component-scan base-package="XXX" /> 
<mvc:annotation-driven /> 

다음은 작동 중입니다.

1

; 그러나 귀하는 요청 본문으로 컨텐츠를 제출하지 않습니다.

대신 URL 내에 요청 본문을 인코딩하려하지만 이와 같이 작동하지 않습니다.

문제를 해결하려면 다음을 수행해야합니다. 요청 경로로

  1. 사용 /sample
  2. 몸 요청로 테스트 JSON 입력을 제공한다 (/sample/{userJson}는 없습니다).

다음과 같이 할 수 있습니다.

@Test 
public void testSampleWebService() throws Exception { 
    String requestBody = "{\"id\":\"102312121\",\"text\":\"Hi user\",\"key\":\"FIRST\"}"; 

    mockMvc.perform(post("/sample").content(requestBody)) 
     .andExpect(status().isOk()) 
     .andExpect(jsonPath("$result", is("Hello "))) 
     .andExpect(jsonPath("$answerKey", is(""))); 
}