首页 文章

在spring mvc test中访问请求体和请求头

提问于
浏览
2

我创建了一个spring boot应用程序,这就是我的控制器的样子 . 我使用postman在请求体中发送json,在请求头中发送一个字符串,然后进一步散列json并将其与请求头获取的字符串进行比较 . 问题是我不知道获取请求体和请求头以便使用MockMvc测试相应的Controller类 .

Controller Logic

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

Test Logic

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();
    }
}

请帮助我在上面的代码中从请求中检索正文和 Headers 值,并将散列(正文)与 Headers 值等同起来

1 回答

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

    你的四个案例:

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

    输出:

    JSON STRING {"country": "India", "currency": "INR", "president": "Ram Nath Kovind" }  header value 12400f74dc4d8d69b713b1fe53f371c25a28a8c5fac2a91eea1f742ab4567c9c
    

相关问题