Java调用Discogs新增listing接口报422错误提示release_id类型无效
排查方向
- 接口规则适配校验:Discogs的
POST /marketplace/listings接口要求所有业务参数必须放在application/json格式的请求体中,不支持从URL查询参数提取参数。你当前代码把所有参数拼接到URL后,请求体为空,接口读取不到release_id字段,就会返回“期望integer类型”的语义错误。你之前的GET请求正常是因为GET接口的参数确实需要放在URL查询串中,和POST接口的参数传递规则不同。 - 请求结构校验:你已经正确设置了
content-type: application/json请求头,但调用post方法时没有传入任何请求体内容,相当于提交了空的JSON结构,所有必填字段均缺失。 - 参数类型校验:你代码中定义的
release_id为int类型,本身类型符合接口要求,不存在类型错误问题。
解决方案
按以下步骤修正代码即可:
- 构造符合要求的JSON请求体,把所有参数放到JSON对象中,不要拼接在URL后面:
// 用你项目中常用的JSON工具类即可,此处以fastjson为例 import com.alibaba.fastjson.JSONObject; JSONObject requestBody = new JSONObject(); requestBody.put("release_id", product.getRelease_id()); // int类型,符合接口要求 requestBody.put("condition", product.getCondition()); requestBody.put("sleeve_condition", product.getSleeveCondition()); requestBody.put("price", product.getPrice()); requestBody.put("status", "Mint"); // 其他可选参数按需添加
- 修正POST请求调用逻辑,把构造好的JSON作为请求体传入
post方法,同时修正错误的请求头配置:
// 接口地址不要带查询参数,使用纯地址:https://api.discogs.com/marketplace/listings WebResource webResource = initRest(restUrl); ClientResponse resp = webResource.type("application/json") .header("Authorization", "Discogs token=" + token) // 修正请求头:Discogs要求必须传递User-Agent头,你之前把头名写错了 .header("User-Agent", "JTLSyncTool/0.1 (+https://#####)") // 传入请求体内容 .post(ClientResponse.class, requestBody.toJSONString());
内容的提问来源于stack exchange,提问作者Vildanb
相关产品推荐
相关产品推荐

