java - 如何在 MockMvc junit 测试中获取 @RestController 的 ResponseBody 作为对象?

标签 java spring spring-mvc junit spring-test

我有一个简单的 junit 测试来验证 servlet 端点的响应。

问题:我想获取作为 java 对象 Person 的响应,而不是作为 string/json/xml 表示形式。

这可能吗?

@RestController
public class PersonController {
    @GetMapping("/person")
    public PersonRsp getPerson(int id) {
        //...
        return rsp;
    }   
}

@RunWith(SpringRunner.class)
@WebMvcTest(value = PersonController.class)
public class PersonControllerTest {
    @Autowired
    private MockMvc mvc;

    @Test
    public void test() {
        MvcResult rt = mvc.perform(get("/person")
                .param("id", "123")
                .andExpect(status().isOk())
                .andReturn();

        //TODO how to cast the result to (Person) p?
    }
}

最佳答案

你可以这样反序列化它:

String json = rt.getResponse().getContentAsString();
Person person = new ObjectMapper().readValue(json, Person.class);

你也可以@Autowire ObjectMapper

关于java - 如何在 MockMvc junit 测试中获取 @RestController 的 ResponseBody 作为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204496/

相关文章:

java - 如何在List数组中找到int元素

java - 在 Spring 中将日志发送到另一个服务

java - 围绕不执行的 Spring AOP 方面

spring-mvc - MVC Controller 和 Web Flow Controller - 请求处理优先级

java - 是否有针对在 Spring Tool Suite(STS)中运行的 Web 应用程序的部署可交付成果(ear/war)?

java - 使用 Grails REST 重写 Java Controller 类

java - JBoss AS 5 中的共享库放在哪里?

java - 如何在微服务架构中重用代码

java - java卡中Applet的最大和最小大小是多少

Spring WebSockets - 如何仅将@DestinationVariable 应用于@SendTo 注释?