编程语言
首页 > 编程语言> > java – Spring MVC测试框架 – 不支持的媒体类型

java – Spring MVC测试框架 – 不支持的媒体类型

作者:互联网

我正在使用spring test mvc框架为控制器编写测试.我正在尝试测试一个post请求,它会产生JSON.实际代码正在运行但测试失败.

我得到错误状态预期200但得到415这意味着不支持的媒体类型.我检查网上的所有例子,似乎我的实现是正确的.请帮帮我.

MyTestcase TestStringPost()运行成功,但TestJSONPost失败.

我使用的是Spring 3.2

我的控制器

@Controller
public class HomeController {


@RequestMapping(value = "/v1/checkstringvalue", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody void testStringPost(@RequestBody String value) {
    logger.info("Welcome home! The client locale is {}.");
}

@RequestMapping(value = "/v1/checkjsonvalue", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody String testJSONPost(@RequestBody Map<String, String> userMap) {
    System.out.println("Inside test jsonpost controller");
    logger.info("Welcome home! The client locale is {}.");
    return "Success";
 }
}

这是我的测试控制器

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class HomeControllerTest {


@Autowired
private WebApplicationContext wac;

private MockMvc mockMvc;

private static final String PROVIDER_A = "PROVIDER_A";

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

@Configuration
public static class TestConfiguration {

    @Bean
    public HomeController simpleController() {
        return new HomeController();
    }
}

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

@Test
public void testStringPost() throws Exception {

    final String createJson = "hello";

    ResultActions resultActions = mockMvc.perform(post(
            "/v1/checkstringvalue").contentType(MediaType.TEXT_PLAIN)
            .content(createJson));

    resultActions.andDo(print());
    resultActions.andExpect(status().isOk());
}

@Test
public void testjsonPost() throws Exception {

    System.out.println("Inside testjsonpost");
    final String createJson = "{\"name\":\"hello\",\"email\":\"hello@example.com\"}";

    ObjectMapper objectMapper = new ObjectMapper();
    ObjectNode userJson = objectMapper.createObjectNode();
    userJson.put("name", "tarun");
    userJson.put("email", "tarun@gmail.com");

    ResultActions resultActions = mockMvc
            .perform(post("/v1/checkjsonvalue")
                    .contentType(APPLICATION_JSON_UTF8)
                    .accept(APPLICATION_JSON_UTF8)
                    .content(objectMapper.writeValueAsBytes(userJson)));

    resultActions.andDo(print());
    resultActions.andExpect(status().isOk());
}
}

解决方法:

好的,所以有了

perform(post("/myapi").contentType(MediaType.APPLICATION_JSON).content("{\"mykey\":\"myvalue\"}"))   

很重要

但也请检查您的控制器:如果缺少任何这些注释,它将无法工作:

@EnableWebMvc
@Controller
public class MyController {
    @RequestMapping(value="/myapi", method=RequestMethod.POST)
    public void postOnApi(@RequestBody MyWidget myWidget) {
    }
}

@EnableWebMvc @Controller和@RequestBody都需要(在我的实验中)来删除415状态代码错误.

标签:java,spring,spring-test-mvc
来源: https://codeday.me/bug/20190612/1225619.html