天天看點

application/x-www-form-urlencoded not support

今天在對接支付寶支付時,支付寶回調報錯,顯示

org.springframework.web.HttpMediaTypeNotSupportedException: 
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
           

一、分析:

這個問題的意思其實是,支付寶請求頭和我們系統接口定義的請求頭不一緻導緻的

支付寶的請求頭是

application/x-www-form-urlencoded;charset=UTF-8
           

而我們接口定義的地方是這樣的,使用了@RequestBody

application/x-www-form-urlencoded not support

而RequestBody對應的請求頭是application/json,是以這樣就出現問題。

二、解決方法:

因為我們不能去改支付寶的請求,是以我們隻能修改我們的代碼

application/x-www-form-urlencoded not support

 使用

HttpServletRequest req
           

然後用Http工具擷取request裡面的參數

public static Map<String, String> getParameterMap(HttpServletRequest request) {
        Enumeration<String> parameters = request.getParameterNames();
        HashMap params = new HashMap();

        while(parameters.hasMoreElements()) {
            String parameter = (String)parameters.nextElement();
            String value = request.getParameter(parameter);
            if (StringUtils.isNotBlank(value)) {
                params.put(parameter, value);
            }
        }

        return params;
    }
           

三、擴充

其實這種問題我們可以用postman來重制

1、如果使用@RequestBody,我們就得把參數放在Body裡面,這樣是沒問題的,如圖:

application/x-www-form-urlencoded not support

 Body裡必須是raw,下拉選擇JSON格式。

2、在raw前面還有一個x-www-form-urlencoded選項tab,這個正好對應支付回調的請求頭

我們可以模拟一下

application/x-www-form-urlencoded not support

 發現問題,記錄一下