【发布时间】:2018-04-16 04:34:18
【问题描述】:
只有当我对 Jackson 使用字段级反序列化时,才会收到 400 Bad Request 错误。如果我在类级别上进行反序列化,那么它工作正常。我只想传递用户 ID 而不是整个用户对象,因此是字段级反序列化。据我所知,反序列化器甚至没有被调用。我的代码如下:
模型类:
@Entity
@Table(name = "expense")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Expense implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private long id;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "receiptPicture", column = @Column(name = "receipt_picture"))
})
private ExpenseDetail detail;
@ManyToOne
@JoinColumn(name = "given_by")
@JsonDeserialize(using = ExpenseGivenByDeserializer.class)
private User givenBy;
@ManyToOne
@JoinColumn(name = "given_for")
@JsonIgnore
private House givenFor;
@ManyToMany(cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(
name = "users_approved_expenses",
joinColumns = {@JoinColumn(name = "expense_id")},
inverseJoinColumns = {@JoinColumn(name = "user_id")}
)
@JsonIgnore
private List<User> approvedUsers;
@Embedded
@JsonIgnore
private Timer timer;
//....setters and getters
反序列化器类:
@Component
public class ExpenseGivenByDeserializer extends JsonDeserializer<User> {
@Autowired
private UserDao userDao;
@Override
public User deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
long id = node.get("givenBy").asLong();
System.out.println("herer");
return userDao.find(id);
}
}
我在发这个:
{
"detail" : {
"description" : "rice 2 kg",
"receiptPicture" : "../image/kk.jpg",
"cost" : "1500"
},
"givenBy": 15
}
【问题讨论】:
标签: java json spring-mvc json-deserialization jackson-databind