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

spring mvc测试中的访问请求主体和请求头

谷梁宝
2023-03-14

我创建了一个spring boot应用程序,我的控制器就是这样的。我使用postman在请求体中发送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();
    }
}

请在上面的代码中帮助我从请求中检索body和header值,并将hash(body)与header值相等

共有1个答案

云啸
2023-03-14
@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
 类似资料:
  • 问题内容: 将请求正文与GET请求一起传递是否违反REST风格? 例如在Elasticsearch中过滤一些信息 甚至设计了一些工具来避免GET请求中的请求主体(例如邮递员) 问题答案: 从RFC: GET请求消息中的有效负载没有定义的语义。在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。 换句话说,这不是禁止的,但是它是未定义的行为,应避免使用。HTTP客户端,服务器和代理可以随

  • 在SpringMVC项目中,客户机发送一个带有序列化对象的请求,客户机本身是一个小程序,所以它不希望收到一个web页面作为响应,而是一个带有字符串对象的响应,该响应将告诉他这是成功还是失败。那么解决方案是什么呢?我想在@Controller中使用返回void的方法,或者返回不存在页面的方法?(在这两种情况下,我还想知道是否有回复给客户)

  • 我试图在PostMan中重新创建C#委托处理程序 我已经创建了计算auth头值的请求前脚本。 目前我的脚本是这样的: 这非常适合没有任何正文的GET请求。但是,当我发送请求时,由于C#和Postman中的正文哈希差异,我收到了未经授权的响应(401)。 我正在尝试访问完整的请求体,因为我需要计算出它的散列值。 我有C#的工作代码,而不是我想用Postman重新创建相同的请求。 我的问题是: 如何在

  • 如何在JAX-RS中实现WriterInterceptor接口时访问请求头? 完整的代码如下:

  • 我正试图根据API验证自己。这个API使用来自请求的原始主体来创建哈希,它将使用该哈希对我的令牌进行身份验证。 出于测试目的,我使用postman和一个请求前脚本来创建哈希。一切都很好,只有一个例外: 在代码选项卡中,我有 谢了!

  • 我试图在flask应用程序上记录post请求,如下所示: 我这样做是因为我怀疑有时我会在POST上得到一个格式错误的JSON对象。我看到的问题是日志包含一个截断的请求体——它似乎被夹在中间... 我不能放日志摘要,因为它是敏感数据。。为什么请求被截断?我做错了吗? 谢谢