我有一个具有以下签名的控制器:
public HttpEntity<RepresentationModel> confirmRegistration(@Valid @RequestBody RegistrationRequest request{}
RegistrationRequest JSON如下所示
{
//other fields
"countryCode":"44",
"mobileNumber": "07545878096"
}
我正在尝试为此JSON编写自定义反序列化程序
我的mobileNumber类如下所示:
@Getter
@Setter
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class MobileNumber {
@JsonProperty("mobilePhoneNumber")
@JsonAlias("mobileNumber")
String number;
@JsonProperty(value = "countryCode", defaultValue = "44")
String countryCode;
}
和请求对象,如下所示:
public class RegistrationRequest {
//other fields
@JsonDeserialize(using = MobileNumberDeserializer.class)
@MobileNumberValidator
private final MobileNumber mobilePhoneNumber;
}
其中,MobileNumberDeserializer类似于:
public class ContactNumberDeserializer extends StdDeserializer<MobileNumber> {
private static final long serialVersionUID = 1L;
protected ContactNumberDeserializer() {
super(MobileNumber.class);
}
@Override
public MobileNumber deserialize(JsonParser jsonParser, DeserializationContext ctxt)
throws IOException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
String mobileNumber = "";
if (node.has("mobilePhoneNumber")) {
mobileNumber = node.get("mobilePhoneNumber").asText();
} else if (node.has("phoneNumber")) {
mobileNumber = node.get("phoneNumber").asText();
} else if (node.has("mobileNumber")) {
mobileNumber = node.get("mobileNumber").asText();
}
String countryCode = node.get("countryCode").asText();
return new MobileNumber(mobileNumber, countryCode);
}
当控制器jsonParser.getCodec().readTree(jsonParser);
调用ContactNumberDeserializer时,它只是mobilePhoneNumber
节点,无法访问countryCode
。
3条答案
按热度按时间yjghlzjz1#
快速检查联系人号码和手机号码是否相同类。
理想情况下应该是
公共类ContactNumberDeserializer扩展了标准反序列化程序
piok6c0g2#
在您的手机号码类中:
更新jsonProperty注解,如上面的国家代码。希望它有帮助!
qcbq4gxm3#
你不需要写
ContactNumberDeserializer
,如果你写了你的类MobileNumber
,它会简单地工作。