@PostMapping(path = "/test", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void test(@RequestParam Map<String, String> params) {
System.out.println(params);
}
我激发下面的请求,它在一个项目中工作,但不是另一个项目。我试图禁用所有筛选器和参数解析器,但没有任何工作。
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param1=1¶m2=2" http://localhost:8080/test
任何帮助或想法都将不胜感激。另外,如果有人能给我指出Spring解析参数的地方,我可以试着调试,看看会发生什么。
添加另一个答案,因为我遇到了同样的问题,但以不同的方式解决了它。
我也有一个请求日志过滤器,它以Jonas Pedersen的回答中描述的类似方式包装传入的请求并缓存响应输入流。Spring Boot从2.1.2.release更新到2.3.4.release
我将传入请求包装在缓存请求包装器中,该包装器缓存输入流。对我来说,问题是由于某些原因(到目前为止还未知),request.getParameterValue(String key)方法返回null,尽管包装的请求显然有一个非空的参数映射。简单地访问包装的请求参数映射就为我解决了这个问题...非常奇怪。
原始包装器类,与Spring Boot 2.1.2一起工作。发布:
public class CachingRequestWrapper extends HttpServletRequestWrapper {
private final byte[] cachedBody;
public CachingRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
InputStream requestInputStream = request.getInputStream();
this.cachedBody = StreamUtils.copyToByteArray(requestInputStream);
}
@Override
public ServletInputStream getInputStream() throws IOException {
return new CachedInputStream(this.cachedBody);
}
@Override
public BufferedReader getReader() throws IOException {
ByteArrayInputStream byteArrayInputStream =
new ByteArrayInputStream(this.cachedBody);
String encoding = StringUtils.isEmpty(this.getCharacterEncoding())
? StandardCharsets.UTF_8.name()
: this.getCharacterEncoding();
return new BufferedReader(new InputStreamReader(byteArrayInputStream, encoding));
}
}
为了简洁起见,省略了CachedInputStream类的实现。
public class CachingRequestWrapper extends HttpServletRequestWrapper {
private final byte[] cachedBody;
private final Map<String, String[]> parameterMap;
public CachingRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
parameterMap = request.getParameterMap(); // <-- This was the crucial part
InputStream requestInputStream = request.getInputStream();
this.cachedBody = StreamUtils.copyToByteArray(requestInputStream);
}
@Override
public Map<String, String[]> getParameterMap() {
return this.parameterMap; // this was added just to satisfy spotbugs
}
}
我正在使用OpenAPI生成器生成Spring REST API。下面是一个片段: 它生成一个Spring REST API方法(只是一个有趣的方法): 然后,我想使用从集成测试中调用它: 我得到一个错误: 我对服务器端进行了一点调试,看起来它需要一个多部分的内容,但我不明白为什么。 内容类型为application/x-www-form-urlencoded的Http Post请求在Spring
问题内容: 是新来春目前正在试图做的HTTP POST请求的应用程序/ x-WWW的形式,URL编码,但是当我守这在我的头,然后春天不承认它,并说 了 有人知道如何解决吗?请评论我。 我的控制器的一个示例是: 问题答案: 问题在于,当我们使用application / x-www-form-urlencoded时,Spring不会将其理解为RequestBody。因此,如果要使用它,则必须删除@R
我是spring的新手,目前正在尝试执行HTTP POST request Application/x-www-form-urlencoded,但当我将其保存在头中时,spring无法识别它,并对说 org.springframework.web.httpmediatypenotsupportedexception:不支持内容类型“application/x-www-form-urlencoded
我有一个spring-boot应用程序,它唯一做的事情是接收http请求。 这是我的Spring管理员: 我在用邮递员寄请求。我的spring应用程序接收到的请求不能更改,因为代码不是由我的团队维护的。 请求标头 请求主体 我在这里发现了很多类似问题的问题,但不是我必须解决的完全相同的问题。我尝试添加和删除@RequestBody,将@RequestBody替换为@RequestParam,我尝试
@PostMapping public UserResponse createUser(@RequestBody UserRequest userDetail){ 这是我收到的错误代码 } 我尝试了很多不同的方法仍然没有得到解决方案这是来自邮递员的图片来自邮递员的图片
我以前有ElasticSearch 5.2,刚刚升级到6.0。 我试图创建一个索引模板以下指南在这里,但得到了错误 我的问题是