gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:52:21 25 4
gpt4 key购买 nike

我正在使用 spring test mvc 框架为 Controller 编写测试。我正在尝试测试发布请求并生成 JSON。实际代码正在运行,但测试失败。

我收到错误 Status expected 200 但收到 415,这意味着不支持的媒体类型。我检查了网上的所有示例,看来我的实现是正确的。请帮助我。

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

我正在使用 Spring 3.2

我的 Controller

@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";
}
}

这是我的测试 Controller

@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\"}"))   

很重要。

但还要检查您的 Controller :如果它缺少任何这些注释,它将无法工作:

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

@EnableWebMvc @Controller 和@RequestBody 都是必需的(在我的实验中)以消除 415 状态代码错误。

关于java - Spring MVC 测试框架 - 不支持的媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23404765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com