在JBoss 6.2和JBoss 7.3中部署应用时的不同响应
我们最近已将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
}
]
正如您所看到的,上面两个回答有细微的差别。这破坏了我的前端代码,因为现在在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版本。
任何遇到类似问题的人,请评论/建议解决方案。
解决方案
这是杰克逊的问题,默认情况下用于序列化。
这里是release将更改带给杰克逊的时候。您面临的问题也在Jackson 2.5
的兼容性问题中提到JBoss 7.3可能附带了一个已经包含的Jackson库,所以这就是您会受到影响的地方。选中此处如何exclude provided Jackson from JBoss 7
然后使用早于2.5的Jackson库打包您的应用程序,并再次部署它。
相关文章