我创建了一个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值相等
@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对象。我看到的问题是日志包含一个截断的请求体——它似乎被夹在中间... 我不能放日志摘要,因为它是敏感数据。。为什么请求被截断?我做错了吗? 谢谢