当前位置: 首页 > 知识库问答 >
问题:

如何在MockMvc jUnit测试中获取@RestController的响应主体作为对象?

仉嘉泽
2023-03-14

我有一个简单的junit测试,用于验证servletendpoint的响应。

问题:我想以java对象Person而不是字符串/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?
    }
}

共有3个答案

袁琪
2023-03-14

如果不受mockMvc的限制,可以使用TestRestTemplate::getForEntity

白学
2023-03-14

由于我的目标主要是测试整个设置,即通过Spring自动配置的对象映射器和rest控制器集,我只是为endpoint创建了一个模拟。并返回输入参数作为响应,因此我可以验证它:

@RestController
public class PersonControllerMock {
    @GetMapping("/person")
    public PersonDTO getPerson(PersonDTO dto) {
        return dto;
    }   
}


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

    @Test
    public void test() {
        mvc.perform(get("/person")
                .param("id", "123")
                .param("firstname", "john")
                .param("lastname", "doe")
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.firstname").value("john"))
                .andExpect(jsonPath("$.lastname").value("doe"))
                .andReturn();
    }
}
谯志诚
2023-03-14

您可以像这样反序列化它:

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

您还可以@Autowire对象映射器

 类似资料:
  • 我正在使用SpringCloudGateway过滤器,需要让响应主体记录它。我知道这是有问题的,因为SpringGateway是建立在SpringReactor上的,但我仍在寻找实现这一点的方法。 有全局过滤器,代码: 在控制台中,我只得到这个输出大约30次,没有输出短语“应用方法”。

  • 我从服务器得到这样的响应: 但打印fetch API捕获中的err只会返回错误对象。 它打印了这个(来自谷歌浏览器): 我想得到正确的错误处理状态代码,就像服务器没有响应一样。 在这种情况下,有没有办法获取响应数据?否则,我可以尝试什么替代方案? 任何建议都将不胜感激!

  • 问题内容: 我正在发出HTTP请求并侦听“数据”: 问题在于响应是分块的,因此“数据”只是发送回的一部分内容。 我如何将全身退回? 问题答案:

  • 我正在尝试测试我的Quarkus应用程序。我想检查响应是否大于 0,问题是我调用的终结点返回的是 String 而不是数字。如何将响应转换为数字并检查它是否大于 0? 这是我收到的回复:“28357”。这是我得到的错误:

  • 我正在使用Spring Web创建一个rest资源。我用Java创建了类似于Json响应的文档对象。当我使用String.class作为响应类型时,我从请求中获取响应。当我更改对我创建的类的响应时,boy是null。 这是我的httpgetter Json文档 函数调用 JSON响应

  • 问题内容: 反向代理是可行的。如何获得响应主体? 问题答案: 有一个领域。您可以使用它来修改响应。例如: 整个场景的操场示例:http : //play.golang.org/p/b0S5CbCMrI。