java - JSON 对象无法从 START_OBJECT 令牌中反序列化 `java.lang.String` 的实例
问题描述
我有一个带有 json 类型的“数据”列的 postgres 表。我想将数据保存到此表中,但是当我尝试使用以下输入将数据保存到表中时,出现以下错误。
21-03-18 00:06:34 [http-nio-9090-exec-10] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver.logException - Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
at [Source: (PushbackInputStream); line: 2, column: 11] (through reference chain: com.ge.digital.oa.moa.dto.SavedFilterDto["json"])]
输入是
{
"json": {"key": "12345678", "fieldName": "part", "operator": "eq", "operands": ["599320"]},
"name": "xxxxx",
"sso": "502622018"
}
DTO 代码是:
SuppressWarnings("serial")
@Data
@Getter @Setter @AllArgsConstructor @NoArgsConstructor
@Builder(toBuilder=true)
public class SavedFilterDto implements Serializable {
private int id;
private String name;
@JsonProperty("json")
private String json;
private String sso;
服务代码:
@Transactional
private SavedFilter buildAndSaveSavedFilterObject(String name, String sso, String object, SavedFilter savedFilter) throws SQLException {
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(object);
savedFilter = savedFilter.toBuilder().name(name).json(jsonObject).user(getUserById(sso)).build();
return savedFilterRepo.save(savedFilter);
}
实体代码:
@SuppressWarnings("serial")
@Entity
@Getter @Setter @AllArgsConstructor @NoArgsConstructor
@Builder(toBuilder=true)
@Table(name="saved_filters")
public class SavedFilter implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="data", columnDefinition = "json")
private PGobject json;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_sso")
private User user;
如果我将 dto 代码中的 json 参数更改为 Object,那么我在 PGobject.setValue() 中收到错误,因为它接受字符串并且将对象转换为 String 会产生一些运行时错误 如何解决此问题
解决方案
推荐阅读
- r - 根据R中的2个因素计算中位数
- swift - INImage 或 INImageNoteContent 有问题吗?
- react-native - React-Native:添加 react-navigation 使代码不断重建
- docker - 如何通过docker镜像在kubernetes容器中安装kubectl
- c# - 关闭窗口时调试不会停止
- c++ - 当初始化列表时参数不可用时如何初始化成员对象?
- npm - 无法通过带有 X11 转发的“npm start”运行电子
- dart - 尝试使用 InheritedWidget 但获取 Null
- mongodb - 未找到从 MongoDB 2.4 升级到 2.6 的类
- python - 如何使用 python 截断 db 结果以进行断言?