我已经从4.0升级了Spring版本。从x到4.2.3(刚才是4.2.4),@RequestBody注释中的“required=false”属性突然无法按预期工作(在版本更改之前)。
HttpStatus 415的服务器响应-不支持的媒体类型。
控制器方法(每个Spring版本相同)。
@RequestMapping(value = "/entity/{entityId}/{from}/{size}", method = RequestMethod.POST)
@ResponseBody
@JsonView(ToShowIn.App.class)
public ResponseEntity<?> getActiveEntityPaged(
@PathVariable int entityId, @PathVariable int from, @PathVariable int size,
@RequestBody(required = false) EntityFilterParam entityFilterParam) {
...
}
实际上,这并不是问题,因为从客户端开始,避免发送null,例如,设置emptyEntityFilterParam
实例就足以修复它。但我想了解,这个令人烦恼的问题是否是因为我的错误概念,或者更确切地说是因为新的Spring版本的错误。
更新#1
版本
<spring-version>4.2.4.RELEASE</spring-version>
<jackson-2-version>2.3.2</jackson-2-version>
请求来自Android设备,使用SpringAndroid库(又称RestTemplate)。
通用方法,适用于4.0。x版本,其中EntityFilterParam可以为null。
super.doRestList(
new HttpEntity<EntityFilterParam>(EntityFilterParam, this.getHttpHeaders()),
HttpMethod.POST,
urlBuilder);
在4.2.3和4.2.4中,要解决此问题,EntityFilterParam不能为null-
super.doRestList(
new HttpEntity<EntityFilterParam>((EntityFilterParam != null) ? EntityFilterParam : new EntityFilterParam(), this.getHttpHeaders()),
HttpMethod.POST,
urlBuilder);
在doRestList中,执行RestTemplate请求。
final ResponseEntity<E[]> responseEntity =
(ResponseEntity) super.getRestTemplate()
.exchange(urlBuilder.getURL(), httpMhetod,
requestEntity, this.entityArray.getClass());
其中,urlBuilder.getURL()
(URL字符串,在这里@Path变量工作正常)和this.getHttpHeaders()
返回下一个HttpHeaders配置。
RestFactory.httpHeaders = new HttpHeaders();
RestFactory.httpHeaders.setAuthorization(this.getAuthorization(user));
RestFactory.httpHeaders.set(HttpHeaders.CONNECTION, "Close"); // Switch off keep-alive.
RestFactory.httpHeaders.set(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.8");
RestFactory.httpHeaders.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
超级。getRestTemplate()是一个单例方法,它返回带有我自己的CloseableHttpClient配置的RestTemplate实例集。
我知道HttpHeaders。
丢失,但有意识地,事实上,它在http正文负载不为空时工作,在为空时失败。application/json
的CONTENT\u TYPE
当错误发生时,在请求流进入控制器方法内部之前执行415,因此,不执行任何操作。
更新#2
另一个有趣的点是,Jackson2将null值序列化为“null”字符串,然后主体负载不是null,而是用“null”填充。
我试着复制这个精确的问题,但没有多大成功。
您是否确认使用curl命令问题仍然存在?类似curl-vvv-X POSThttps://example.com/entity/12/50/10
(如果是,粘贴这里的输出)
对于springandroid
中的restemplate
,我并不是百分之百地关注这一点,但是如果没有提供内容类型,模板默认会添加一个“内容类型:application/x-www-form-urlencoded”
。如果是这种情况,为“org.springframework.web”
配置“DEBUG”
日志级别应该显示如下内容
[INFO] [talledLocalContainer] org.springframework.web.HttpMediaTypeNotSupportedException:
Content type 'application/x-www-form-urlencoded' not supported
我认为你应该设置内容类型。你提到当你这样做的时候这是失败的——你能详细说明一下吗?
使用spring4@transactional和jdbctemplate时事务不起作用!!请帮帮我 application.xml 代理创建失败?
我有基类和,它们有多个实现。但是,每个参数化类型只有一个实现,因此应该能够确定需要哪个子类。 在将第二个参数添加到基类和(从而添加到它们的所有子类)之前,这实际上是有效的。但是在添加了这些之后,下面是Spring初始化期间的错误: UnsatisfiedDependencyException:创建名为“My App”的bean时出错:通过字段“x1”表示的未满足的依赖项;嵌套异常为org.spri
有人能通过xml使用Spring < code > JCacheCacheManager 创建一个Ehcache支持的< code>CacheManager吗?我有这样的东西。不知道如何为Ehcache3创建< code > javax . cache . cache manager 。 谢谢!
> 此代码在Spring5中工作。但我的公司需要Spring 4。 在Spring4中,login与InMemoryAuthentication一起工作很好。但是当我添加了jdbc逻辑(c3p0,MySQL依赖关系&add DataSource代码&jdbc连接,c3p0连接池.properties文件);服务器运行,登录页打开,但身份验证失败(用户名/密码不正确)。 下面是包结构 null 公共
因此,我在一个控制器中有一个非常简单的代码片段,在这个代码片段中,我使用从外部文件中获取数据,它工作得很好!但是当我使用时,我会在控制台中得到一个
问题内容: 正则表达式似乎还可以,因为第一行将子字符串正确替换为“ helloworld”,但是后者却不匹配,因为我看不到“ whynothelloworld?”。在控制台上 问题答案: 期望 整个 字符串匹配,而不仅仅是子字符串。 使用正则表达式匹配器对象的方法代替: