java - 邮递员无法解析 JSON 对象
问题描述
我正在使用 dropwizard 框架,我正在尝试PUT
通过邮递员请求,但我得到:
{
"code": 400,
"message": "Unable to process JSON"
}
POSTMAN 请求的正文是:
[{"v1":".abc",
"v2": false,
"v3": 2,
"v4": ["Other"]}]
我的资源文件如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path(value = "/v1/")
public class SomeClass {
private static final Logger LOGGER = LoggerFactory.getLogger(SomeClass.class);
@PUT
@Path(value = "/path/{value}")
@Produces(MediaType.APPLICATION_JSON)
public Response addCandidates(@PathParam(value = "value") String value, OtherClass otherclass) {
LOGGER.info("Request recieved"); // this line is not getting executed
return Response.status(Response.Status.OK).entity(null).build();
}
}
类定义:
import lombok.Data;
import java.util.List;
@Data
public class OtherClass {
private List<Something> something;
}
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
public class Something extends abc {
}
表架构:
import java.util.Set;
@Data
public class abc implements Comparable<abc> {
@PrimaryKey
@JSONField(name = "v1")
public String v1;
@JSONField(name = "v2")
public boolean v2;
@JSONField(name = "v3")
public Integer v3;
@JSONField(name = "v4")
public Set<String> v4;
}
当我要去 POSTMAN 的调试控制台时,它会显示正确的填充值。我不确定是否v4
是导致问题的原因
解决方案
您的 json 不正确,您正在尝试将对象数组解析为OtherClass
不是数组的对象。所以你的json应该是:
{
"something": [
{
"v1": ".abc",
"v2": false,
"v3": 2,
"v4": [
"Other"
]
}
]
}
此外,您正在混合注释 - @JSONField
来自 FastJson 库,但@JsonIgnoreProperties
来自 Jackson,因此请确保使用相同的序列化器。
推荐阅读
- javascript - 使用带有firestore的异步函数返回未定义的数组
- c - GCC 优化魔法
- c# - C# Entity Framework 代码首先无法将相关数据添加到对象列表中
- mysql - 任何自动化 mySQL 查询验证的好工具?
- html - 如何使一些图像显示在带有文本的 div 下?
- vmware-clarity - 如何使用清晰的库迁移到 Angular 10?
- python - 如何将多个 .pcd 文件组合成一个包含点云数据(python)的 .pcd 文件?
- r - 在 R 中计算月份数
- apollo-server - 如何在 React Relay 和 Apollo Server 中使用持久查询
- reactjs - 在 expo web 和 nextjs 中导入 expo 字体和资产