在Spring MVC测试中访问请求正文和请求标头

Sun*_*nil 2 model-view-controller junit spring spring-boot mockmvc

我已经创建了一个Spring Boot应用程序,这就是我的控制器的外观。我正在使用邮递员在请求正文中发送json,并在请求标头中发送一个字符串,然后进一步对json进行哈希处理,并将其与请求标头中获得的字符串进行比较。问题是我不知道为了使用MockMvc测试相应的Controller类而获取请求主体和请求标头。

控制器逻辑

@RestController
public class Comparison {

    @PostMapping(path = "/test")
    public boolean compareHash(@RequestBody String json, 
                               @RequestHeader(value = "code") String oldHashValue) {

        Hash hashObj = new Hash();
        String newHashValue = hashObj.sha512(json);
        return oldHashValue.equals(newHashValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

测试逻辑

public class ComparisionTest {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

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

    @Test
    public void contextLoads() throws Exception {
         RecordedRequest recordedRequest = server.takeRequest();
    }
}
Run Code Online (Sandbox Code Playgroud)

请在上面的代码中帮助我,以从请求中检索主体和标头值,并将hash(body)与标头值等效

Bar*_*ath 6

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void test() {

        mockMvc.perform(post("<<url>>").content("<<jsonStrig>>").header("key","value"));
    }

}
Run Code Online (Sandbox Code Playgroud)

在您的情况下:

   @Autowired
    private MockMvc mockMvc;

    @Test
public void test() throws  Exception {

    String jsonString="{\"country\": \"India\", \"currency\": \"INR\", \"president\": \"Ram Nath Kovind\" } ";
    mockMvc.perform(MockMvcRequestBuilders.post("/test").content(jsonString).header("code","12400f74dc4d8d69b713b1fe53f371c25a28a8c5fac2a91eea1f742ab4567c9c"));
}
Run Code Online (Sandbox Code Playgroud)

输出:

JSON STRING {"country": "India", "currency": "INR", "president": "Ram Nath Kovind" }  header value 12400f74dc4d8d69b713b1fe53f371c25a28a8c5fac2a91eea1f742ab4567c9c
Run Code Online (Sandbox Code Playgroud)