解決 jsonrpc4j error code -32602 method parameters invalid 的錯誤

使用 briandilley/jsonrpc4j 時,server response 可能遇到這個錯誤:
    "error": {
        "code": -32602,
        "message": "method parameters invalid"
    }

jsonrpc4j 會分析 input params 與 java method params 是不是一致,它會檢查 params 數量、名稱,如果沒有 mapping 就拋出錯誤了。

我們可以從 com.googlecode.jsonrpc4j.JsonRpcBasicServer Class 查看到,裡面的
private AMethodWithItsArgs findBestMethodByParamsNode(Set<Method> methods, JsonNode paramsNode) 就是在處理這塊,視 input 資料結構分別呼叫 findBestMethodUsingParamIndexes 或 findBestMethodUsingParamNames 處理。

接下來看 findBestMethodUsingParamNames
從這裡可以發現 jsonrpc4j 會檢查 params size是否一致、是否允許 allowExtraParams 與 allowLessParams。

解決方法:
若使用 spring boot 整合 jsonrpc4j,只要在 AutoJsonRpcServiceImplExporter 之處增加設定即可,例如:

@Bean
    public static AutoJsonRpcServiceImplExporter autoJsonRpcServiceImplExporter() {
        AutoJsonRpcServiceImplExporter exp = new AutoJsonRpcServiceImplExporter();
        exp.setAllowExtraParams(true);
        exp.setAllowLessParams(true);
        return exp;
    }


參考資料
https://github.com/briandilley/jsonrpc4j

留言

這個網誌中的熱門文章

Java Servlet MVC web app

JavaMail透過Gmail寄信發生AuthenticationFailedException錯誤