有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java spring@RequestParam Unicode未正确获取

我正在使用Spring在java中创建RESTful服务。 我定义如下:

package com.pro.controller;    

@RestController
@RequestMapping("/favorites")
public class FavoritesController extends SkeletonController {

    protected static Logger log = Logger.getLogger("FavoritesController");

    @Autowired
    private FavoritesService service;

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public StandardResult savePaymentList(
            @RequestParam(value = "sessionId", required = true) String sessionId,
            @RequestParam(value = "comment", required = true) String comment,
            @RequestParam(value = "serviceId", required = true) int serviceId,
            @RequestParam(value = "fields", required = true) String fields) throws Exception {

        log.info("sessionId:" + sessionId + ", serviceId:" + serviceId + ", fields:" + fields + ", comment:" + comment);

        SavePaymentListRequest request = new SavePaymentListRequest();
        request.setLang("en");
        request.setSid(sessionId);
        request.setSessionRequestType(SessionRequestType.MOBILE);


        request.setFields(arrOfFields);
        return service.savePaymentList(request);
    }  

}

现在我已经从不同的客户那里打电话给它,以准确判断客户或服务上的问题。 我最后试穿的是:chrome扩展名:POSTMAN。 我正在使用POST选项执行此方法,我的请求查询字符串为: https://xx_mydomain_xx.com/fake/favorites/save/sessionId=cd6c5d88-771e-4831-a30a-c414fafa2803&comment=;serviceId=157&;字段=blafied

我已经记录了发送请求的参数。在我的日志中,我发现俄文字符没有正确发布。例如,我发布了Саа,但在我的日志中,我发现了?Ñ?ма

我在网页上添加了过滤器。xml文件:

 <filter>
    <filter-name>encoding-filter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding-filter</filter-name>
        <url-pattern>/*</url-pattern>
 </filter-mapping>

但这对我没有帮助

你能给我什么建议


共 (2) 个答案

  1. # 1 楼答案

    您不需要在测试请求中对这些参数进行URL编码吗?否则,当在请求参数映射步骤中解码时,它们将中断,就像您描述的那样

  2. # 2 楼答案

    我不确定我的答案是否对其他servlet容器有用,但在Tomcat上,还需要指定conf/server.xml中每个Connector元素的URIEncoding属性

    <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" OTHER_ATTRIBUTES />
    
    <Connector SSLEnabled="true" port="8443" scheme="https" secure="true" URIEncoding="UTF-8" OTHER_ATTRIBUTES />
    

    有关更多信息,请参阅Tomcat documentation