一些字符(例如括号)将在Spring @RequestBody中编码。如何解码它们?

时间:2018-06-12 08:25:25

标签: java json spring character-encoding

让我们考虑这段代码:

@ResponseBody
@RequestMapping(value = "/getFiltered", method = RequestMethod.POST)
public ResponseEntity<OraPhysicalGoodMiniDataWrapper> getFilteredProducts(@RequestBody OraSalesOfGoodsFilters filters) {
    return oraProductListController.getFilteredProducts(filters);
}

filters参数包含名为searchValue的String。

问题是:当我在json中传递例如searchValue: "(2016)"时,Spring控制器会收到searchValue=&#40;2016&#41;。 我尝试使用Java URLDecoder 对其进行解码,但它无效。

我的问题是: 是否有任何Java方法可以解码String中的所有这些字符?或者我应该编写自己的方法吗?

2 个答案:

答案 0 :(得分:1)

这是您的问题解决方案。使用javascript或弹簧设置。

Javascript

ng serve --prod

弹簧设置

的pom.xml

var param = {
    "searchValue": "(2016)"    
};

$.ajax({
    type: 'POST',
    dataType: 'JSON',
    data:  JSON.stringify(param),
    contentType:"application/json; charset=UTF-8",
    url:  '/test/filter',

    error: function() {
        // error
    },                
    success: function(returnJSON) {
        // success
    }    
}): 

servlet.xml中

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.0.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.0.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.0.4</version>
</dependency>

答案 1 :(得分:1)

Joop Eggen中提及的comment - StringEscapeUtils.unescapeXml(String value)方法被证明是有用的。

它是 unescapeXml() ,而不是 unescapeJavaScript() (这是行不通的),因为我将来自前端的值作为JSON(而不是XML)从JavaScript传递,但我很高兴它有效。