Skip to content

feat(cp/oa): add phonenumber field to ContentValue for PhoneNumber control#3973

Open
tarzanwang wants to merge 1 commit intobinarywang:developfrom
tarzanwang:cf-patch/phonenumber-field
Open

feat(cp/oa): add phonenumber field to ContentValue for PhoneNumber control#3973
tarzanwang wants to merge 1 commit intobinarywang:developfrom
tarzanwang:cf-patch/phonenumber-field

Conversation

@tarzanwang
Copy link
Copy Markdown

Problem

The WeCom approval API returns PhoneNumber control values as:

"value": { "phonenumber": { "area": "+62", "number": "87827717730" } }

ContentValue has no phonenumber field, so Gson silently drops it during
getApprovalDetail deserialization. Any code calling valueObj.getPhonenumber()
always gets null, even when the user filled in a valid phone number.

Fix

Add a PhoneNumber nested class and a corresponding phonenumber field
with @SerializedName("phonenumber") to ContentValue.

Test

Deserialize the following JSON fragment into ContentValue and assert
getPhonenumber().getNumber() equals "87827717730":

{ "phonenumber": { "area": "+62", "number": "87827717730" } }

…ntrol

The WeCom approval API returns PhoneNumber control values as:
  value.phonenumber = { area: "+62", number: "87827717730" }

Without this field, Gson silently drops the value during getApprovalDetail
deserialization, causing phone number to be empty when parsing form data.

Fixes: ContentValue missing phonenumber field for PhoneNumber control type.
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 修复企业微信 OA 审批详情接口中 PhoneNumber 控件值无法被 Gson 反序列化的问题,通过在 ContentValue 中补齐 phonenumber 对象结构,使调用方能够读取区号与号码。

Changes:

  • ContentValue 中新增 PhoneNumber 内部类(area/number)。
  • 新增 @SerializedName("phonenumber") 对应字段以支持反序列化。

Comment on lines +65 to +67
private PhoneNumber phonenumber;

/**
Copy link

Copilot AI Apr 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

字段名 phonenumber 不符合本类其他字段的驼峰命名风格(如 newNumberbankAccount 等),会导致生成的 getter/setter 为 getPhonenumber/setPhonenumber,对 Java 调用方不够一致。建议将字段改为 phoneNumber(保持 @SerializedName("phonenumber") 不变);如确实需要兼容 getPhonenumber() 命名,可额外提供一个委托方法作为别名。

Suggested change
private PhoneNumber phonenumber;
/**
private PhoneNumber phoneNumber;
/**
* 兼容历史命名的 getter
*
* @return 手机号控件值
*/
public PhoneNumber getPhonenumber() {
return this.phoneNumber;
}
/**
* 兼容历史命名的 setter
*
* @param phonenumber 手机号控件值
* @return 当前对象
*/
public ContentValue setPhonenumber(PhoneNumber phonenumber) {
this.phoneNumber = phonenumber;
return this;
}
/**

Copilot uses AI. Check for mistakes.
Comment on lines +64 to +76
@SerializedName("phonenumber")
private PhoneNumber phonenumber;

/**
* Phone number control value: {@code value.phonenumber = { area, number }}.
* e.g. area="+62", number="87827717730"
*/
@Data
public static class PhoneNumber implements Serializable {
private static final long serialVersionUID = 1L;
private String area;
private String number;
}
Copy link

Copilot AI Apr 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 为 ContentValue 新增了 phonenumber 反序列化能力,但当前改动未包含对应的单元测试。仓库中已有对 OA JSON 序列化/反序列化的 TestNG 用例(例如 WxCpOaServiceImplTest 中的 testApprovalDetailSumMoney),建议补充一个最小化测试:将 { "phonenumber": { "area": "+62", "number": "87827717730" } } 反序列化为 ContentValue 并断言 getPhoneNumber()/getPhonenumber()number 字段正确,避免后续回归。

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants