【发布时间】:2021-10-17 05:46:49
【问题描述】:
我们最近将 jBoss EAP 从 6.2 升级到了 7.3.0。
升级后,我们观察到应用程序开始出现异常行为。我们正在使用 Spring 框架版本 - 4.1.9.RELEASE。
例如:
@RestController
public class CommonController{
@RequestMapping(value = "/rest/report/testResponse", method = RequestMethod.GET)
public @ResponseBody List<Entry<String, Number>> getData(){
List<Entry<String, Number>> technologyList = new ArrayList<>();
SimpleEntry<String, Number> simpleEntry1 = new AbstractMap.SimpleEntry<String,Number>("Java",1);
SimpleEntry<String, Number> simpleEntry2 = new AbstractMap.SimpleEntry<String,Number>("Spring",2);
technologyList.add(simpleEntry1);
technologyList.add(simpleEntry2);
return technologyList;
}
}
在 jBoss 6.2 中部署应用程序时我得到的响应是:
[
{
"key": "Java",
"value": 1
},
{
"key": "Spring",
"value": 2
}
]
现在在 jBoss 7.3 中部署应用程序时我得到的响应是:
[
{
"Java": 1
},
{
"Spring": 2
}
]
如您所见,上述两个响应存在细微差别。这破坏了我的前端代码,我们使用了下面的 javascript 代码,因为现在在 jBoss7 中,我们没有得到带有键/值前缀的响应:
<ui-select-choices repeat="obj.value as obj in technologyList | orderBy:'key'">
<div class ="small" ng-bind-html="obj.key" title ="{{obj.key}}"></div>
</ui-select-choices>
我们无法修改后端/前端代码,因为该应用程序已经在生产环境中运行,并且无法在许多地方更改代码。我们只是想升级jBoss版本。
任何人都遇到过类似的问题,请评论/建议解决方案。
【问题讨论】:
-
如果你不能改变你的代码,那么唯一的选择就是使用一个不同的 jboss 版本,你的代码仍然可以工作。不完全确定版本之间发生了什么变化。但我假设spring(或jboss)使用了一个新的jackson版本,他们明确地将
Map.Entry转换为{[key]: [value]}而不是{"key": [key], "value": [value]} -
感谢@Lino 指出问题中的问题 - 无需在问题中添加“紧急/尽快”等形容词。我将立即编辑我的问题,并牢记以后不要这样做。
-
还有一个相关的问题:Issue when serializing Map.Entry using jackson,如果你可以将
jackson-databind版本调整为以前使用的版本,那么你可以留在jboss 7上
标签: javascript java spring spring-mvc jboss7.x