0

我在我的对象中使用 javax.validation,在我的注释中我有这样的错误消息:

@NotNull(message = "This name can't be a null parameter")
private String name;

当我在端点上使用 @Valid 时,java 将检查我的验证并返回错误 400,其中包含错误列表。在我的集成测试中,我检查了这样的错误:

@Test
public void saveUser() throws Exception{
    User user = builder.newUser();

    getMockMvc().perform(post(URL_USER)
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(user)))
        .andExpect(status().isBadRequest());
        
}

但是这个测试是不完整的,因为我不检查错误消息。我需要一种方法来检查我的消息"This name can't be a null parameter"。我知道......我认为这条消息来自一个名为 defaultMessage 的参数中的一系列错误。有人可以帮助我吗?

4

1 回答 1

0

您可以使用 andReturn() 将返回消息分配给 MvcResult,然后您可以获得字符串形式的响应。之后,您可以解析(我在这里使用 org.json)这个返回字符串并获取错误消息。

final MvcResult mvcResult = getMockMvc().perform(post(URL_USER)
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(user)))
        .andExpect(status().isBadRequest())
        .andReturn();

final String resultString = mvcResult.getResponse().getContentAsString();

final JSONObject jsonObject = new JSONObject(resultString);
System.out.println(jsonObject.get("message"))
于 2020-09-04T12:01:51.623 回答