diff --git a/spring-boot-starter-camunda/pom.xml b/spring-boot-starter-camunda/pom.xml
index a20c10a10..1ae3ad303 100644
--- a/spring-boot-starter-camunda/pom.xml
+++ b/spring-boot-starter-camunda/pom.xml
@@ -44,6 +44,11 @@
jackson-core
provided
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ provided
+
io.camunda.spring
spring-client-zeebe
diff --git a/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java b/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java
index 0b6182a11..f1ec959b9 100644
--- a/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java
+++ b/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java
@@ -1,10 +1,10 @@
package io.camunda.zeebe.spring.client.properties;
import static io.camunda.zeebe.spring.client.configuration.PropertyUtil.*;
-import static io.camunda.zeebe.spring.client.properties.ZeebeClientConfigurationProperties.*;
import static java.util.Optional.*;
import static org.apache.commons.lang3.StringUtils.*;
+import com.fasterxml.jackson.annotation.JsonProperty;
import io.camunda.zeebe.client.api.response.ActivatedJob;
import io.camunda.zeebe.spring.client.annotation.Variable;
import io.camunda.zeebe.spring.client.annotation.VariablesAsType;
@@ -16,6 +16,7 @@
import io.camunda.zeebe.spring.client.bean.MethodInfo;
import io.camunda.zeebe.spring.client.bean.ParameterInfo;
import io.camunda.zeebe.spring.client.properties.common.ZeebeClientProperties;
+import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -104,10 +105,17 @@ private List readVariablesAsTypeParameters(MethodInfo methodInfo) {
parameters.forEach(
pi ->
ReflectionUtils.doWithFields(
- pi.getParameterInfo().getType(), f -> result.add(f.getName())));
+ pi.getParameterInfo().getType(), f -> result.add(extractParameterName(f))));
return result;
}
+ private String extractParameterName(Field field) {
+ if (field.isAnnotationPresent(JsonProperty.class)) {
+ return field.getAnnotation(JsonProperty.class).value();
+ }
+ return field.getName();
+ }
+
private void applyOverrides(ZeebeWorkerValue zeebeWorker) {
final Map workerConfigurationMap =
getOrLegacyOrDefault(
diff --git a/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java b/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java
index 725d1dd6c..df5c80f7a 100644
--- a/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java
+++ b/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java
@@ -2,6 +2,7 @@
import static org.assertj.core.api.Assertions.*;
+import com.fasterxml.jackson.annotation.JsonProperty;
import io.camunda.zeebe.client.api.response.ActivatedJob;
import io.camunda.zeebe.spring.client.annotation.JobWorker;
import io.camunda.zeebe.spring.client.annotation.Variable;
@@ -47,6 +48,9 @@ private static CamundaClientProperties properties() {
@JobWorker
void sampleWorker(@Variable String var1, @VariablesAsType ComplexProcessVariable var2) {}
+ @JobWorker
+ void sampleWorkerWithJsonProperty(@VariablesAsType PropertyAnnotatedClass var2) {}
+
@JobWorker
void activatedJobWorker(@Variable String var1, ActivatedJob activatedJob) {}
@@ -360,6 +364,19 @@ void shouldApplyWorkerOverridesOverGlobalOverrides() {
assertThat(zeebeWorkerValue.getEnabled()).isFalse();
}
+ @Test
+ void shouldApplyPropertyAnnotationOnVariableFiltering() {
+ // given
+ PropertyBasedZeebeWorkerValueCustomizer customizer =
+ new PropertyBasedZeebeWorkerValueCustomizer(legacyProperties(), properties());
+ ZeebeWorkerValue zeebeWorkerValue = new ZeebeWorkerValue();
+ zeebeWorkerValue.setMethodInfo(methodInfo(this, "testBean", "sampleWorkerWithJsonProperty"));
+ // when
+ customizer.customize(zeebeWorkerValue);
+ // then
+ assertThat(zeebeWorkerValue.getFetchVariables()).containsExactly("weird_name");
+ }
+
private static class ComplexProcessVariable {
private String var3;
private String var4;
@@ -380,4 +397,9 @@ public void setVar4(String var4) {
this.var4 = var4;
}
}
+
+ private static class PropertyAnnotatedClass {
+ @JsonProperty("weird_name")
+ private String value;
+ }
}