Jon*_*ica 8 java spring curl binary-data
我需要编写一个能够处理CUrl发送的二进制数据的应用程序,例如:
curl localhost:8080/data --data-binary @ZYSF15A46K1.txt
Run Code Online (Sandbox Code Playgroud)
我创建了一个POST处理方法如下:
@RequestMapping(method = RequestMethod.POST, value = "/data")
public void acceptData(HttpEntity<byte[]> requestEntity) throws Exception {
process(requestEntity.getBody());
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有返回原始二进制数据.我已经尝试发送一个GZip文件,经过Spring之后它现在可以解压缩得更长,这让我相信我要么得到太多的数据要么太少数据.
如何解决此问题并获取原始二进制数据?
它就像在控制器方法的参数中声明一个InputStream一样简单:
@RequestMapping(method = RequestMethod.POST, value = "/data")
public void acceptData(InputStream dataStream) throws Exception {
processText(dataStream);
}
Run Code Online (Sandbox Code Playgroud)
您不应该禁用HiddenHttpMethodFilter,如果您这样做可能是因为您的请求在某种程度上是错误的.请参阅https://github.com/spring-projects/spring-boot/issues/5676.
我能够使用以下代码解决此问题:
@Bean
public FilterRegistrationBean registration(HiddenHttpMethodFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
@RequestMapping(method = RequestMethod.POST, value = "/data")
public void acceptData(HttpServletRequest requestEntity) throws Exception {
byte[] processedText = IOUtils.toByteArray(requestEntity.getInputStream());
processText(processedText);
}
Run Code Online (Sandbox Code Playgroud)
Spring默认进行预处理,这会导致HttpServletRequest它到达时为空RequestMapping.添加FilterRegistrationBeanBean解决了这个问题.
| 归档时间: |
|
| 查看次数: |
13033 次 |
| 最近记录: |