diff --git a/.chronus/changes/http-client-java_warning-on-not-spread-json-merge-patch-payload-2026-1-28-11-33-56.md b/.chronus/changes/http-client-java_warning-on-not-spread-json-merge-patch-payload-2026-1-28-11-33-56.md new file mode 100644 index 00000000000..549b6dbdc4b --- /dev/null +++ b/.chronus/changes/http-client-java_warning-on-not-spread-json-merge-patch-payload-2026-1-28-11-33-56.md @@ -0,0 +1,7 @@ +--- +changeKind: feature +packages: + - "@typespec/http-client-java" +--- + +Add a warning when emitter does not spread for json-merge-patch payload. \ No newline at end of file diff --git a/packages/http-client-java/emitter/src/code-model-builder.ts b/packages/http-client-java/emitter/src/code-model-builder.ts index ee84ce1aa2a..2d710e7d378 100644 --- a/packages/http-client-java/emitter/src/code-model-builder.ts +++ b/packages/http-client-java/emitter/src/code-model-builder.ts @@ -2077,6 +2077,11 @@ export class CodeModelBuilder { if (jsonMergePatch) { // skip model flatten, if "application/merge-patch+json" + reportDiagnostic(this.program, { + code: "spread-json-merge-patch-payload-not-supported", + target: sdkMethod.__raw ?? NoTarget, + }); + if (sdkType.isGeneratedName) { schema.language.default.name = pascalCase(op.language.default.name) + "PatchRequest"; } diff --git a/packages/http-client-java/emitter/src/lib.ts b/packages/http-client-java/emitter/src/lib.ts index a7e5491c184..9ffcee2adf5 100644 --- a/packages/http-client-java/emitter/src/lib.ts +++ b/packages/http-client-java/emitter/src/lib.ts @@ -119,6 +119,13 @@ export const $lib = createTypeSpecLibrary({ default: paramMessage`Constant header '${"headerName"}' is removed from response headers.`, }, }, + "spread-json-merge-patch-payload-not-supported": { + severity: "warning", + messages: { + default: + "Spread JSON merge-patch payload is not supported. The reason is that a property in JSON merge-patch payload class can: set a value; not set so that value does not change; set to null to remove the value. A parameter on method cannot distinguish the latter 2 cases.", + }, + }, }, emitter: { options: EmitterOptionsSchema,