解決 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
"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
留言
張貼留言