Доступ к телу запроса и заголовку запроса в весеннем тесте mvc

Я создал приложение весенней загрузки, и вот как выглядит мой контроллер. Я использую почтальона для отправки json в теле запроса и строки в заголовке запроса, затем дополнительно хеширую json и сравниваю его со строкой, полученной заголовком запроса. Проблема в том, что я не знаю, как получить тело запроса и заголовок запроса, чтобы протестировать соответствующий класс контроллера с помощью MockMvc.

Логика контроллера

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

Логика тестирования

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

Пожалуйста, помогите мне в приведенном выше коде, чтобы получить значение тела и заголовка из запроса и приравнять хэш (тело) к значению заголовка.


person Sunil    schedule 10.09.2017    source источник


Ответы (1)


@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
person Barath    schedule 10.09.2017
comment
Будет ли это отправлять строку json в хеш-функцию req, чтобы получить хеш-значение n, а затем сравнивать ее со значением заголовка - person Sunil; 10.09.2017
comment
он достигнет формы контроллера там, где ваша функция должна его обработать - person Barath; 10.09.2017
comment
и у меня есть сомнения, как он берет строку json из содержимого () и мне нужно упомянуть имя заголовка в ключе ... пожалуйста, объясните вкратце, так как я новичок в этом деле - person Sunil; 10.09.2017
comment
проверьте обновленный ответ. Это будет работать mockMvc.perform(MockMvcRequestBuilders.post(/test).content(hello).header(code,hello)); - person Barath; 10.09.2017
comment
тело запроса имеет строку JSON {страна: Индия, валюта: INR, президент: Рам Нат Ковинд}, а заголовок запроса - 12400f74dc4d8d69b713b1fe53f371c25a28a8c5fac2a91eea1f742ab4567c9c, а ключ - pkg_hashcode....это было отправлено как POST-запрос от почтальона.... не могли бы вы сказать мне, что мне нужно поставить вместо кода - person Sunil; 10.09.2017
comment
это json твое pojo? или просто строка? - person Barath; 10.09.2017
comment
да, это сработало ... но тестовый пример пройден ... мне нужно проверить его и на случай сбоя. - person Sunil; 10.09.2017