diff --git a/packages/java/parser-jvm-plugin-transfertypes/src/main/java/com/vaadin/hilla/parser/plugins/transfertypes/TransferTypesPlugin.java b/packages/java/parser-jvm-plugin-transfertypes/src/main/java/com/vaadin/hilla/parser/plugins/transfertypes/TransferTypesPlugin.java index f689b7d8a1..51bde133e6 100644 --- a/packages/java/parser-jvm-plugin-transfertypes/src/main/java/com/vaadin/hilla/parser/plugins/transfertypes/TransferTypesPlugin.java +++ b/packages/java/parser-jvm-plugin-transfertypes/src/main/java/com/vaadin/hilla/parser/plugins/transfertypes/TransferTypesPlugin.java @@ -9,6 +9,7 @@ import javax.annotation.Nonnull; +import com.fasterxml.jackson.databind.JsonNode; import com.vaadin.hilla.mappedtypes.Order; import com.vaadin.hilla.mappedtypes.Pageable; import com.vaadin.hilla.mappedtypes.Sort; @@ -32,7 +33,7 @@ public final class TransferTypesPlugin extends AbstractPlugin { static private final Map> classMap = new HashMap<>(); - { + static { classMap.put("org.springframework.data.domain.Page", List.class); classMap.put("org.springframework.data.domain.Pageable", Pageable.class); @@ -42,6 +43,7 @@ public final class TransferTypesPlugin classMap.put("reactor.core.publisher.Flux", Flux.class); classMap.put("com.vaadin.hilla.EndpointSubscription", EndpointSubscription.class); + classMap.put(JsonNode.class.getName(), Object.class); } public TransferTypesPlugin() { diff --git a/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/Endpoint.java b/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/Endpoint.java new file mode 100644 index 0000000000..13b7375ca4 --- /dev/null +++ b/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/Endpoint.java @@ -0,0 +1,11 @@ +package com.vaadin.hilla.parser.plugins.transfertypes.jsonnode; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface Endpoint { +} diff --git a/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/JsonNodeEndpoint.java b/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/JsonNodeEndpoint.java new file mode 100644 index 0000000000..3d4149fcf8 --- /dev/null +++ b/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/JsonNodeEndpoint.java @@ -0,0 +1,10 @@ +package com.vaadin.hilla.parser.plugins.transfertypes.jsonnode; + +import com.fasterxml.jackson.databind.JsonNode; + +@Endpoint +public class JsonNodeEndpoint { + public JsonNode echo(JsonNode node) { + return node; + } +} diff --git a/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/JsonNodeTest.java b/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/JsonNodeTest.java new file mode 100644 index 0000000000..48949b0f90 --- /dev/null +++ b/packages/java/parser-jvm-plugin-transfertypes/src/test/java/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/JsonNodeTest.java @@ -0,0 +1,27 @@ +package com.vaadin.hilla.parser.plugins.transfertypes.jsonnode; + +import com.vaadin.hilla.parser.core.Parser; +import com.vaadin.hilla.parser.plugins.backbone.BackbonePlugin; +import com.vaadin.hilla.parser.plugins.transfertypes.TransferTypesPlugin; +import com.vaadin.hilla.parser.plugins.transfertypes.test.helpers.TestHelper; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Set; + +public class JsonNodeTest { + private final TestHelper helper = new TestHelper(getClass()); + + @Test + public void should_ReplaceJsonNodeClassWithObject() + throws IOException, URISyntaxException { + var openAPI = new Parser().classLoader(getClass().getClassLoader()) + .classPath(Set.of(helper.getTargetDir().toString())) + .endpointAnnotation(Endpoint.class.getName()) + .addPlugin(new BackbonePlugin()) + .addPlugin(new TransferTypesPlugin()).execute(); + + helper.executeParserWithConfig(openAPI); + } +} diff --git a/packages/java/parser-jvm-plugin-transfertypes/src/test/resources/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/openapi.json b/packages/java/parser-jvm-plugin-transfertypes/src/test/resources/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/openapi.json new file mode 100644 index 0000000000..097592ea73 --- /dev/null +++ b/packages/java/parser-jvm-plugin-transfertypes/src/test/resources/com/vaadin/hilla/parser/plugins/transfertypes/jsonnode/openapi.json @@ -0,0 +1,55 @@ +{ + "openapi" : "3.0.1", + "info" : { + "title" : "Hilla Application", + "version" : "1.0.0" + }, + "servers" : [ + { + "url" : "http://localhost:8080/connect", + "description" : "Hilla Backend" + } + ], + "tags" : [ + { + "name" : "JsonNodeEndpoint", + "x-class-name" : "com.vaadin.hilla.parser.plugins.transfertypes.jsonnode.JsonNodeEndpoint" + } + ], + "paths" : { + "/JsonNodeEndpoint/echo" : { + "post" : { + "tags" : [ + "JsonNodeEndpoint" + ], + "operationId" : "JsonNodeEndpoint_echo_POST", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "node" : { + "type" : "object" + } + } + } + } + } + }, + "responses" : { + "200" : { + "description" : "", + "content" : { + "application/json" : { + "schema" : { + "type" : "object" + } + } + } + } + } + } + } + } +}