diff --git a/micronaut/hello-world-server/pom.xml b/micronaut/hello-world-server/pom.xml
index c7d3881642..8d42259776 100644
--- a/micronaut/hello-world-server/pom.xml
+++ b/micronaut/hello-world-server/pom.xml
@@ -4,7 +4,7 @@
hello-world-server
0.1
- hello.world.server.Application
+ com.baeldung.micronaut.server.ServerApplication
1.0.0.M2
9
@@ -69,7 +69,12 @@
4.12
test
-
+
+ io.projectreactor
+ reactor-core
+ 3.1.6.RELEASE
+
+
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java
new file mode 100644
index 0000000000..de61ecd5f3
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java
@@ -0,0 +1,10 @@
+package com.baeldung.micronaut.client;
+
+import io.micronaut.http.annotation.Get;
+import io.micronaut.http.client.Client;
+
+@Client("/greet")
+public interface GreetingClient {
+ @Get("/{name}")
+ String greet(String name);
+}
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java
new file mode 100644
index 0000000000..905acc8433
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java
@@ -0,0 +1,10 @@
+package com.baeldung.micronaut.server;
+
+import io.micronaut.runtime.Micronaut;
+
+public class ServerApplication {
+
+ public static void main(String[] args) {
+ Micronaut.run(ServerApplication.class);
+ }
+}
\ No newline at end of file
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java
new file mode 100644
index 0000000000..dcc64eb26e
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java
@@ -0,0 +1,20 @@
+package com.baeldung.micronaut.server.controller;
+
+import com.baeldung.micronaut.server.service.GreetingService;
+import io.micronaut.http.annotation.Controller;
+import io.micronaut.http.annotation.Get;
+import reactor.core.publisher.Mono;
+
+import javax.inject.Inject;
+
+@Controller("/async/greet")
+public class AsyncGreetController {
+
+ @Inject
+ private GreetingService greetingService;
+
+ @Get("/{name}")
+ public Mono greet(String name) {
+ return Mono.just(greetingService.getGreeting() + name);
+ }
+}
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java
new file mode 100644
index 0000000000..64a499ce52
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java
@@ -0,0 +1,28 @@
+package com.baeldung.micronaut.server.controller;
+
+import com.baeldung.micronaut.server.service.GreetingService;
+import io.micronaut.http.MediaType;
+import io.micronaut.http.annotation.Body;
+import io.micronaut.http.annotation.Controller;
+import io.micronaut.http.annotation.Get;
+import io.micronaut.http.annotation.Post;
+
+import javax.inject.Inject;
+
+@Controller("/greet")
+public class GreetController {
+
+ @Inject
+ private GreetingService greetingService;
+
+ @Get("/{name}")
+ public String greet(String name) {
+ return greetingService.getGreeting() + name;
+ }
+
+ @Post(value = "/{name}", consumes = MediaType.TEXT_PLAIN)
+ public String setGreeting(@Body String name)
+ {
+ return greetingService.getGreeting() + name;
+ }
+}
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java
new file mode 100644
index 0000000000..81cc18c0ff
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java
@@ -0,0 +1,14 @@
+package com.baeldung.micronaut.server.service;
+
+import io.micronaut.context.annotation.Primary;
+
+import javax.inject.Singleton;
+
+@Primary
+@Singleton
+public class EnglishGreetingService implements GreetingService {
+ @Override
+ public String getGreeting() {
+ return "Hello ";
+ }
+}
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java
new file mode 100644
index 0000000000..a27957566a
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java
@@ -0,0 +1,6 @@
+package com.baeldung.micronaut.server.service;
+
+public interface GreetingService {
+
+ String getGreeting();
+}
diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java
new file mode 100644
index 0000000000..6ce6bfe8df
--- /dev/null
+++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java
@@ -0,0 +1,11 @@
+package com.baeldung.micronaut.server.service;
+
+import javax.inject.Singleton;
+
+@Singleton
+public class SpanishGreetingService implements GreetingService {
+ @Override
+ public String getGreeting() {
+ return "Hola ";
+ }
+}
diff --git a/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java b/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java
deleted file mode 100644
index f0ce5e5d8c..0000000000
--- a/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package hello.world.server;
-
-import io.micronaut.runtime.Micronaut;
-
-public class Application {
-
- public static void main(String[] args) {
- Micronaut.run(Application.class);
- }
-}
\ No newline at end of file
diff --git a/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java b/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java
deleted file mode 100644
index 2e55a39381..0000000000
--- a/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package hello.world.server.controller;
-
-import io.micronaut.http.annotation.Body;
-import io.micronaut.http.annotation.Controller;
-import io.micronaut.http.annotation.Get;
-import io.micronaut.http.annotation.Post;
-
-@Controller("/greet")
-public class GreetController {
-
- private String greeting = "Hello, ";
-
- @Get("/{name}")
- public String greet(String name) {
- return greeting + name;
- }
-
- @Post
- public void setGreeting(@Body String greeting)
- {
- this.greeting = greeting;
- }
-}
diff --git a/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java b/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java
new file mode 100644
index 0000000000..0c1634d01d
--- /dev/null
+++ b/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java
@@ -0,0 +1,33 @@
+package com.baeldung.micronaut.client;
+
+import io.micronaut.context.ApplicationContext;
+import io.micronaut.runtime.server.EmbeddedServer;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class GreetingClientTest {
+ private EmbeddedServer server;
+ private GreetingClient client;
+
+ @Before
+ public void setup()
+ {
+ this.server = ApplicationContext.run(EmbeddedServer.class);
+ this.client = server.getApplicationContext().getBean(GreetingClient.class);
+ }
+
+ @Test
+ public void shouldReturnName() {
+ String response = client.greet("Mike");
+ assertEquals(response, "Hello Mike");
+ }
+
+ @After
+ public void cleanup()
+ {
+ this.server.stop();
+ }
+}