在JBoss 6.2和JBoss 7.3中部署应用时的不同响应

2022-04-17 00:00:00 spring javascript java spring-mvc jboss7.x

我们最近已将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库打包您的应用程序,并再次部署它。

相关文章