From 0e5ff1c9e706d4b9907a4da6b22ddf66113df95c Mon Sep 17 00:00:00 2001 From: vpopa285 Date: Wed, 15 Jul 2026 16:40:11 +0300 Subject: [PATCH 1/3] task 1-0-0 --- .../README.MD | 17 ----- .../pom.xml | 59 ------------------ .../intro/WelcomeToJavaWebCourseApp.java | 23 ------- .../src/main/resources/static/logo.png | Bin 111168 -> 0 bytes .../src/main/resources/templates/welcome.html | 21 ------- 0-0-intro/pom.xml | 18 ------ .../com/bobocode/net/client/ClientUtil.java | 8 ++- .../com/bobocode/net/server/ServerUtil.java | 8 ++- 8 files changed, 11 insertions(+), 143 deletions(-) delete mode 100644 0-0-intro/0-0-1-welcome-to-java-web-exercises/README.MD delete mode 100644 0-0-intro/0-0-1-welcome-to-java-web-exercises/pom.xml delete mode 100644 0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/java/com/bobocode/intro/WelcomeToJavaWebCourseApp.java delete mode 100644 0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/static/logo.png delete mode 100644 0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/templates/welcome.html delete mode 100644 0-0-intro/pom.xml diff --git a/0-0-intro/0-0-1-welcome-to-java-web-exercises/README.MD b/0-0-intro/0-0-1-welcome-to-java-web-exercises/README.MD deleted file mode 100644 index 4aecf01..0000000 --- a/0-0-intro/0-0-1-welcome-to-java-web-exercises/README.MD +++ /dev/null @@ -1,17 +0,0 @@ -# Welcome to Java Web Exercises - -This is a welcome test project to check if everything works okay on your computer - -### You should have installed on your local machine ❗️ -* [JDK 17+](hhttps://jdk.java.net/17/) -* [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - -### How to start ❓ - -* Just **clone the repository** to your computer -* Open project in your IDE and **configure JDK 17** for the project -* Open terminal and **run a command** `./mvnw clean package` (UNIX) or `mvnw.cmd clean package` (Windows) -* Open class `WelcomeToJavaWebCourseApp` and **run** `main()` -* [Click here](http://localhost:8080/welcome) 🔗 - -### You'll see if it works 😉 diff --git a/0-0-intro/0-0-1-welcome-to-java-web-exercises/pom.xml b/0-0-intro/0-0-1-welcome-to-java-web-exercises/pom.xml deleted file mode 100644 index 7f9b236..0000000 --- a/0-0-intro/0-0-1-welcome-to-java-web-exercises/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - 0-0-intro - com.bobocode - 1.0-SNAPSHOT - - 4.0.0 - - 0-0-1-welcome-to-java-web-exercises - - - UTF-8 - UTF-8 - - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - 2.7.3 - - - - - - - - org.springframework.boot - spring-boot-dependencies - 2.4.0 - pom - import - - - - - - \ No newline at end of file diff --git a/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/java/com/bobocode/intro/WelcomeToJavaWebCourseApp.java b/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/java/com/bobocode/intro/WelcomeToJavaWebCourseApp.java deleted file mode 100644 index b4787c1..0000000 --- a/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/java/com/bobocode/intro/WelcomeToJavaWebCourseApp.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.bobocode.intro; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -@SpringBootApplication -@Controller -public class WelcomeToJavaWebCourseApp { - - public static void main(String[] args) { - SpringApplication.run(WelcomeToJavaWebCourseApp.class, args); - } - - @GetMapping({"", "/welcome"}) - public String welcome(@RequestParam(value = "name", required = false) String name, Model model) { - model.addAttribute("name", name); - return "welcome"; - } -} diff --git a/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/static/logo.png b/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/static/logo.png deleted file mode 100644 index 371a4a74a1f3b2f9fa56364f59287cc197630661..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111168 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 z 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 z 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
@b3_5#vxUp*zVU=nvLEt^!gdU;j$4 z5~#=tMMJ3H*aG<5ISSxPnm+E%_p3&RHHmz3t(fw%xDVg;{Bd02{5RT1U<*YSvw90F!JrH8tN)Fh zT29ES;&IwHFpv-O?(NSj*DxaWXrT=v$Mor4?wkh^pt!=M>^mRd zqVed*0201hyJ7h$L7`B9N%XkIC6omN0-Q)`-JV3(ts=gG9pnlk(j9T(VcT6m< zps|2n0z5+7F9`1t_&*vEYlN^57az|FzXBO5E5soP|9S5B8?!f$k)w(Qo-pJZr@!h* zcC2V#=%=#n!1oaW&irDnxG`K}oFk{v(0>J@*oVQ5dlX2P%nNmR@^*K?>3ACM1A%66 zk>X|M_7+@b-zZ0pzB3jlH+fe6VhNPF@H3Kmsc0zDj(roR2U=&p=o5{hEE)rY z&;AM|gx=%%Y5{1FCWJwK7?ZXKeLAi)H`|0mvv=@k?1Rn#vKH3()p>yYUoY^%(E!LTEf3f>IMTZKx}PH6qM~BmC0MkU0~-`* zIs76YLHo$n=JakJ22+$i21r^M`#ieG7#wgR#4GI8@!3u}De^zqwjN@?@LQ2k36y;h z*b!eWWIXFT3h|~uZho^Ohip!3B?Vu)sDvsYh#ncEzdiv8jfk8?fR~I-y&M+kyzN1o%-?Xt68ScMXzp z{su4km5&D$kTkUN@RARSZXI*s0jQq!bkG!PC_Y-4=pXXCE&%uMIcqD#o!T08QUN;K zeAgC3(5;jCr_bns=HUnosO|H|7jsHKtYa9;Ift^Yq1lEn`N(r*X)@A!ArWOYHr?Ev zHUyGSj4dDy?EqOeVS?#N!5Y{G^~;IIv+Nm|o2xtm{C7Nca1~JyMY?{O)IS-bVooXo zqjTjsfx?#)Q8E^&t7?w_WdOw!wbPxZ1`8ZZZ6>Wu{`*1~pv5^#9w9q$I1?^j1{Txn zzQ!HSjsMQ@ue}7Y<8U|VA-$cOeonqFmz1uqJOY*@nmev^gh%Xb=*&?D{k;EMYCZ#p znN{f>MGwI(v5G5?c2%eB1KKb3aZ@|TZpgRvjgiKZ@uD{cKqqRA#I6wdXR%;M*?^+H z#a1`atJh^YpLtl$>}U}E@gZB<0&@?XQTqH5 z_j!gx3m;7sUFi`KkoWwu|dDO;9Osdf&V`Zc+M}&*3o`= z#vP#DlLKn4kQ2@!moJ7~vG5AI0{(*?G&*3WZv_4wID6or#X%E`1LnF$Mixd!AG+0k h`JV}X0hb9^!~fqC?kE4UOTI|-35W0L-+BJ{e*iw;n0^2N diff --git a/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/templates/welcome.html b/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/templates/welcome.html deleted file mode 100644 index ab5410c..0000000 --- a/0-0-intro/0-0-1-welcome-to-java-web-exercises/src/main/resources/templates/welcome.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Welcome to Bobocode! - - -

-

Welcome to Java Web Exercises

-
- -
-
- - \ No newline at end of file diff --git a/0-0-intro/pom.xml b/0-0-intro/pom.xml deleted file mode 100644 index 19c2659..0000000 --- a/0-0-intro/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - java-web-exercises - com.bobocode - 1.0-SNAPSHOT - - 4.0.0 - - 0-0-intro - pom - - 0-0-1-welcome-to-java-web-exercises - - - \ No newline at end of file diff --git a/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/client/ClientUtil.java b/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/client/ClientUtil.java index e2cdac5..4b26b87 100644 --- a/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/client/ClientUtil.java +++ b/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/client/ClientUtil.java @@ -24,7 +24,7 @@ private ClientUtil() { */ @SneakyThrows public static Socket openSocket(String host, int port) { - throw new ExerciseNotCompletedException(); // todo: implement according to javadoc and verify by ClientUtilTest + return new Socket(host, port); } /** @@ -62,6 +62,10 @@ public static String readMessage(BufferedReader reader) { */ @SneakyThrows public static void writeToSocket(String message, Socket socket) { - throw new ExerciseNotCompletedException(); // todo: implement according to javadoc and verify by ClientUtilTest + OutputStream outputStream = socket.getOutputStream(); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream)); + + writer.write(message); + writer.flush(); } } diff --git a/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/server/ServerUtil.java b/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/server/ServerUtil.java index 3778579..2e501d3 100644 --- a/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/server/ServerUtil.java +++ b/1-0-networking-and-http/1-0-0-hello-network-socket/src/main/java/com/bobocode/net/server/ServerUtil.java @@ -41,7 +41,7 @@ public static String getLocalHost() { */ @SneakyThrows public static ServerSocket createServerSocket(int port) { - throw new ExerciseNotCompletedException(); // todo: implement according to javadoc and verify by ServerUtilTest + return new ServerSocket(port); } /** @@ -52,7 +52,7 @@ public static ServerSocket createServerSocket(int port) { */ @SneakyThrows public static Socket acceptClientSocket(ServerSocket serverSocket) { - throw new ExerciseNotCompletedException(); // todo: implement according to javadoc and verify by ServerUtilTest + return serverSocket.accept(); } /** @@ -66,7 +66,9 @@ public static Socket acceptClientSocket(ServerSocket serverSocket) { */ @SneakyThrows public static String readMessageFromSocket(Socket socket) { - throw new ExerciseNotCompletedException(); // todo: implement according to javadoc and verify by ServerUtilTest + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + + return bufferedReader.readLine(); } /** From b43f1a3765bba3230306241f915bce95f292a445 Mon Sep 17 00:00:00 2001 From: vpopa285 Date: Wed, 15 Jul 2026 16:40:19 +0300 Subject: [PATCH 2/3] task 2-0-0 --- .../com/bobocode/servlet/DateServlet.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 2-0-servlet-api/2-0-1-hello-servlet-api/src/main/java/com/bobocode/servlet/DateServlet.java diff --git a/2-0-servlet-api/2-0-1-hello-servlet-api/src/main/java/com/bobocode/servlet/DateServlet.java b/2-0-servlet-api/2-0-1-hello-servlet-api/src/main/java/com/bobocode/servlet/DateServlet.java new file mode 100644 index 0000000..13751d7 --- /dev/null +++ b/2-0-servlet-api/2-0-1-hello-servlet-api/src/main/java/com/bobocode/servlet/DateServlet.java @@ -0,0 +1,21 @@ +package com.bobocode.servlet; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; +import java.io.PrintWriter; +import java.time.LocalDate; + +@WebServlet("/date") +public class DateServlet extends HttpServlet { + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + PrintWriter out = resp.getWriter(); + out.println(LocalDate.now()); + } +} From aa70f3f91a0558d8674f3894fad243d8b4a04b31 Mon Sep 17 00:00:00 2001 From: vpopa285 Date: Wed, 15 Jul 2026 16:40:45 +0300 Subject: [PATCH 3/3] task 3-0-0 --- .../bobocode/config/ApplicationConfig.java | 14 +++- .../java/com/bobocode/dao/FakeAccountDao.java | 4 ++ .../com/bobocode/service/AccountService.java | 2 + .../bobocode/mvc/api/NoteRestController.java | 18 +++++- .../mvc/controller/NoteController.java | 24 ++++++- .../java/com/bobocode/config/RootConfig.java | 11 ++-- .../bobocode/config/WebAppInitializer.java | 7 +- .../java/com/bobocode/config/WebConfig.java | 7 +- .../web/controller/WelcomeController.java | 14 ++-- .../java/com/bobocode/config/RootConfig.java | 12 +++- .../java/com/bobocode/config/WebConfig.java | 10 ++- .../bobocode/dao/impl/InMemoryAccountDao.java | 3 +- .../web/controller/AccountRestController.java | 64 +++++++++++++++---- .../bobocode/StringTrimmingConfiguration.java | 11 ++++ .../TrimmedAnnotationBeanPostProcessor.java | 63 +++++++++++++++++- .../annotation/EnableStringTrimming.java | 12 +++- 16 files changed, 234 insertions(+), 42 deletions(-) create mode 100644 3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/StringTrimmingConfiguration.java diff --git a/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/config/ApplicationConfig.java b/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/config/ApplicationConfig.java index f7ebf38..d7c83f7 100644 --- a/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/config/ApplicationConfig.java +++ b/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/config/ApplicationConfig.java @@ -1,6 +1,11 @@ package com.bobocode.config; import com.bobocode.TestDataGenerator; +import com.bobocode.dao.FakeAccountDao; +import com.bobocode.service.AccountService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; /** * This class specifies application context configuration. It tells Spring to scan "dao" and "service" packages in order @@ -10,7 +15,12 @@ * It also explicitly configures a bean of {@link TestDataGenerator} called "dataGenerator". This beans will be injected * into {@link com.bobocode.dao.FakeAccountDao} in order to generate some fake accounts. */ +@Configuration +@ComponentScan(basePackages = {"com.bobocode.dao", "com.bobocode.service"}) public class ApplicationConfig { - // todo: configure application context according to javadoc by following tests in ApplicationConfigTest - // todo: verify final implementation by running ApplicationContextTest + + @Bean + public TestDataGenerator dataGenerator() { + return new TestDataGenerator(); + } } diff --git a/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/dao/FakeAccountDao.java b/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/dao/FakeAccountDao.java index bae7264..988a90b 100644 --- a/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/dao/FakeAccountDao.java +++ b/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/dao/FakeAccountDao.java @@ -2,6 +2,8 @@ import com.bobocode.TestDataGenerator; import com.bobocode.model.Account; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.List; import java.util.stream.Stream; @@ -16,9 +18,11 @@ * Its bean is called "accountDao". And it uses constructor with explicit autowired annotation in order to inject * {@link TestDataGenerator} instance. */ +@Component("accountDao") public class FakeAccountDao implements AccountDao { private List accounts; + @Autowired public FakeAccountDao(TestDataGenerator testDataGenerator) { this.accounts = Stream.generate(testDataGenerator::generateAccount) .limit(20) diff --git a/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/service/AccountService.java b/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/service/AccountService.java index a46dfd2..d6d69b8 100644 --- a/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/service/AccountService.java +++ b/3-0-spring-framework/3-0-0-hello-spring-framework/src/main/java/com/bobocode/service/AccountService.java @@ -2,6 +2,7 @@ import com.bobocode.dao.AccountDao; import com.bobocode.model.Account; +import org.springframework.stereotype.Service; import static java.util.Comparator.comparing; @@ -12,6 +13,7 @@ * Since it's a service that should be added to the application context, it is marked as Spring service. It order to get * {@link AccountDao} instances, it uses implicit constructor-based injection. */ +@Service public class AccountService { private final AccountDao accountDao; diff --git a/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/api/NoteRestController.java b/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/api/NoteRestController.java index 95d9ed6..f5baf00 100644 --- a/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/api/NoteRestController.java +++ b/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/api/NoteRestController.java @@ -1,7 +1,11 @@ package com.bobocode.mvc.api; import com.bobocode.mvc.data.Notes; +import com.bobocode.mvc.model.Note; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * This controller provides a very simple REST API for Notes. It implements two endpoints that allow you to add @@ -18,9 +22,21 @@ * Spring MVC was used to build the whole application including front-end. So the controllers were connected to the views * via models, like in {@link com.bobocode.mvc.controller.NoteController} */ +@RestController +@RequestMapping("/api/notes") @RequiredArgsConstructor public class NoteRestController { private final Notes notes; - // TODO: implement controller methods according to the javadoc verify your impl using NoteRestControllerTest + @GetMapping + public List getNotes() { + return notes.getAll(); + } + + @PostMapping + public void addNote( + @RequestBody Note note + ) { + notes.add(note); + } } diff --git a/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/controller/NoteController.java b/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/controller/NoteController.java index 3f9d528..4b35f16 100644 --- a/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/controller/NoteController.java +++ b/3-0-spring-framework/3-0-1-hello-spring-mvc/src/main/java/com/bobocode/mvc/controller/NoteController.java @@ -1,7 +1,15 @@ package com.bobocode.mvc.controller; import com.bobocode.mvc.data.Notes; +import com.bobocode.mvc.model.Note; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.List; /** * {@link NoteController} is a typical controller that powers Spring MVC Notes application. This application provides @@ -26,10 +34,24 @@ * back-end applications. The back-end app, will only need to provide data and don't care about view. In that case * the same controller will look like {@link com.bobocode.mvc.api.NoteRestController} */ +@Controller @RequiredArgsConstructor +@RequestMapping("/notes") public class NoteController { private final Notes notes; - // TODO: implement controller methods according to the javadoc and verify your impl using NoteControllerTest + @GetMapping + public String notesPage(Model model) { + List noteList = notes.getAll(); + model.addAttribute("noteList", noteList); + + return "notes"; + } + + @PostMapping + public String addNote(Note note) { + notes.add(note); + return "redirect:/notes"; + } } diff --git a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/RootConfig.java b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/RootConfig.java index 6536634..f32eeb2 100644 --- a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/RootConfig.java +++ b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/RootConfig.java @@ -1,8 +1,8 @@ package com.bobocode.config; import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; import org.springframework.stereotype.Controller; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @@ -11,9 +11,12 @@ * (containing middle-tire services, datasource, etc.). * The configuration must exclude the web layer of the application. *

- * todo: mark this class as config - * todo: enable component scanning for all packages in "com.bobocode" - * todo: ignore all web related config and beans (ignore @{@link Controller}, ignore {@link EnableWebMvc}) using exclude filter */ +@Configuration +@ComponentScan(basePackages = "com.bobocode", + excludeFilters = { + @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class), + @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class), + }) public class RootConfig { } diff --git a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebAppInitializer.java b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebAppInitializer.java index ee23400..e4c4b8a 100644 --- a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebAppInitializer.java +++ b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebAppInitializer.java @@ -1,6 +1,5 @@ package com.bobocode.config; -import com.bobocode.util.ExerciseNotCompletedException; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; /** @@ -9,16 +8,16 @@ public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class[] getRootConfigClasses() { - throw new ExerciseNotCompletedException(); //todo: use {@link RootConfig} as root application config class + return new Class[]{RootConfig.class}; } @Override protected Class[] getServletConfigClasses() { - throw new ExerciseNotCompletedException(); //todo: use {@link WebConfig} as ServletConfig class + return new Class[]{WebConfig.class}; } @Override protected String[] getServletMappings() { - throw new ExerciseNotCompletedException(); //todo: provide default servlet mapping ("/") + return new String[]{"/"}; } } diff --git a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebConfig.java b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebConfig.java index 66d3a84..dff4f92 100644 --- a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebConfig.java +++ b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/config/WebConfig.java @@ -9,10 +9,9 @@ * each DispatcherServlet has its own WebApplicationContext, which inherits all the beans already defined * in the root ApplicationContext. *

- * todo: mark this class as Spring config class - * todo: enable web mvc using annotation - * todo: enable component scanning for package "web" */ - +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = "com.bobocode.web") public class WebConfig { } diff --git a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/web/controller/WelcomeController.java b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/web/controller/WelcomeController.java index 77392cc..9da6e2b 100644 --- a/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/web/controller/WelcomeController.java +++ b/3-0-spring-framework/3-1-1-dispatcher-servlet-initializer/src/main/java/com/bobocode/web/controller/WelcomeController.java @@ -1,16 +1,20 @@ package com.bobocode.web.controller; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + /** * Welcome controller that consists of one method that handles get request to "/welcome" and respond with a message. *

- * todo: mark this class as Spring controller - * todo: configure HTTP GET mapping "/welcome" for method {@link WelcomeController#welcome()} - * todo: tell Spring that {@link WelcomeController#welcome()} method provides response body without view */ - +@Controller public class WelcomeController { + @GetMapping("/welcome") + @ResponseBody public String welcome() { - return "Welcome to Spring MVC!"; + + return "welcome"; } } diff --git a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/RootConfig.java b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/RootConfig.java index c5d1a6d..923ba57 100644 --- a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/RootConfig.java +++ b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/RootConfig.java @@ -1,14 +1,20 @@ package com.bobocode.config; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; import org.springframework.stereotype.Controller; import org.springframework.web.servlet.config.annotation.EnableWebMvc; /** * This class provides application root (non-web) configuration. *

- * todo: 1. Mark this class as config - * todo: 2. Enable component scanning for all packages in "com.bobocode" using annotation property "basePackages" - * todo: 3. Exclude web related config and beans (ignore @{@link Controller}, ignore {@link EnableWebMvc}) */ +@Configuration +@ComponentScan(basePackages = "com.bobocode", + excludeFilters = { + @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class), + @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class), + }) public class RootConfig { } diff --git a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/WebConfig.java b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/WebConfig.java index 1197302..546ce63 100644 --- a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/WebConfig.java +++ b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/config/WebConfig.java @@ -1,11 +1,15 @@ package com.bobocode.config; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + /** * This class provides web (servlet) related configuration. *

- * todo: 1. Mark this class as Spring config class - * todo: 2. Enable web mvc using annotation - * todo: 3. Enable component scanning for package "web" using annotation value */ +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = "com.bobocode.web") public class WebConfig { } diff --git a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/dao/impl/InMemoryAccountDao.java b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/dao/impl/InMemoryAccountDao.java index 5620d5b..f531ce7 100644 --- a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/dao/impl/InMemoryAccountDao.java +++ b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/dao/impl/InMemoryAccountDao.java @@ -3,6 +3,7 @@ import com.bobocode.dao.AccountDao; import com.bobocode.exception.EntityNotFountException; import com.bobocode.model.Account; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; @@ -12,8 +13,8 @@ /** * {@link AccountDao} implementation that is based on {@link java.util.HashMap}. *

- * todo: 1. Configure a component with name "accountDao" */ +@Component("accountDao") public class InMemoryAccountDao implements AccountDao { private Map accountMap = new HashMap<>(); private long idSequence = 1L; diff --git a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/web/controller/AccountRestController.java b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/web/controller/AccountRestController.java index 84fb818..ab0f01c 100644 --- a/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/web/controller/AccountRestController.java +++ b/3-0-spring-framework/3-2-1-account-rest-api/src/main/java/com/bobocode/web/controller/AccountRestController.java @@ -1,21 +1,63 @@ package com.bobocode.web.controller; import com.bobocode.dao.AccountDao; +import com.bobocode.model.Account; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** *

- * todo: 1. Configure rest controller that handles requests with url "/accounts" - * todo: 2. Inject {@link AccountDao} implementation - * todo: 3. Implement method that handles GET request and returns a list of accounts - * todo: 4. Implement method that handles GET request with id as path variable and returns account by id - * todo: 5. Implement method that handles POST request, receives account as request body, saves account and returns it - * todo: Configure HTTP response status code 201 - CREATED - * todo: 6. Implement method that handles PUT request with id as path variable and receives account as request body. - * todo: It check if account id and path variable are the same and throws {@link IllegalStateException} otherwise. - * todo: Then it saves received account. Configure HTTP response status code 204 - NO CONTENT - * todo: 7. Implement method that handles DELETE request with id as path variable removes an account by id - * todo: Configure HTTP response status code 204 - NO CONTENT */ +@RestController +@RequestMapping("/accounts") +@RequiredArgsConstructor public class AccountRestController { + private final AccountDao accountDao; + + @GetMapping + public List getAccounts() { + return accountDao.findAll(); + } + + @GetMapping("/{id}") + public Account getAccount( + @PathVariable long id + ) { + return accountDao.findById(id); + } + + @PostMapping + public ResponseEntity saveUser( + @RequestBody Account account + ) { + return ResponseEntity.status(HttpStatus.CREATED).body(accountDao.save(account)); + } + + @PutMapping("/{id}") + public ResponseEntity updateUser( + @PathVariable long id, + @RequestBody Account account + ) { + if (account.getId() != id) { + throw new IllegalStateException(); + } + accountDao.save(account); + + return ResponseEntity.noContent().build(); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteUser( + @PathVariable long id + ) { + Account account = accountDao.findById(id); + accountDao.remove(account); + + return ResponseEntity.noContent().build(); + } } diff --git a/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/StringTrimmingConfiguration.java b/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/StringTrimmingConfiguration.java new file mode 100644 index 0000000..87495de --- /dev/null +++ b/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/StringTrimmingConfiguration.java @@ -0,0 +1,11 @@ +package com.bobocode; + +import org.springframework.context.annotation.Bean; + +public class StringTrimmingConfiguration { + + @Bean + public TrimmedAnnotationBeanPostProcessor trimmedAnnotationBeanPostProcessor() { + return new TrimmedAnnotationBeanPostProcessor(); + } +} diff --git a/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/TrimmedAnnotationBeanPostProcessor.java b/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/TrimmedAnnotationBeanPostProcessor.java index ee1d441..d3d52df 100644 --- a/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/TrimmedAnnotationBeanPostProcessor.java +++ b/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/TrimmedAnnotationBeanPostProcessor.java @@ -1,10 +1,16 @@ package com.bobocode; +import com.bobocode.annotation.EnableStringTrimming; import com.bobocode.annotation.Trimmed; import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.cglib.proxy.Enhancer; +import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + /** * This is processor class implements {@link BeanPostProcessor}, looks for a beans where method parameters are marked with * {@link Trimmed} annotation, creates proxy of them, overrides methods and trims all {@link String} arguments marked with @@ -16,6 +22,59 @@ * {@link StringTrimmingConfiguration} class which can be imported to a {@link Configuration} class by annotation * {@link EnableStringTrimming} */ -public class TrimmedAnnotationBeanPostProcessor { -//todo: Implement TrimmedAnnotationBeanPostProcessor according to javadoc +public class TrimmedAnnotationBeanPostProcessor implements BeanPostProcessor { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) { + Class beanClass = bean.getClass(); + if (!hasTrimmedStringParameter(beanClass)) { + return bean; + } + + Enhancer enhancer = new Enhancer(); + enhancer.setSuperclass(beanClass); + enhancer.setCallback((MethodInterceptor) (proxy, method, args, methodProxy) -> { + Object[] processedArgs = trimAnnotatedStringArguments(beanClass, method, args); + return method.invoke(bean, processedArgs); + }); + return enhancer.create(); + } + + private boolean hasTrimmedStringParameter(Class beanClass) { + for (Method method : beanClass.getMethods()) { + Annotation[][] parameterAnnotations = method.getParameterAnnotations(); + Class[] parameterTypes = method.getParameterTypes(); + for (int i = 0; i < parameterTypes.length; i++) { + if (parameterTypes[i].equals(String.class) && hasTrimmedAnnotation(parameterAnnotations[i])) { + return true; + } + } + } + return false; + } + + private Object[] trimAnnotatedStringArguments(Class beanClass, Method proxyMethod, Object[] args) throws NoSuchMethodException { + Method beanMethod = beanClass.getMethod(proxyMethod.getName(), proxyMethod.getParameterTypes()); + Annotation[][] parameterAnnotations = beanMethod.getParameterAnnotations(); + Class[] parameterTypes = beanMethod.getParameterTypes(); + + Object[] processedArgs = args.clone(); + for (int i = 0; i < parameterTypes.length; i++) { + if (parameterTypes[i].equals(String.class) + && processedArgs[i] != null + && hasTrimmedAnnotation(parameterAnnotations[i])) { + processedArgs[i] = ((String) processedArgs[i]).trim(); + } + } + return processedArgs; + } + + private boolean hasTrimmedAnnotation(Annotation[] annotations) { + for (Annotation annotation : annotations) { + if (annotation.annotationType().equals(Trimmed.class)) { + return true; + } + } + return false; + } } diff --git a/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/annotation/EnableStringTrimming.java b/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/annotation/EnableStringTrimming.java index 8c06d65..69a5546 100644 --- a/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/annotation/EnableStringTrimming.java +++ b/3-0-spring-framework/3-3-0-enable-string-trimming/src/main/java/com/bobocode/annotation/EnableStringTrimming.java @@ -1,8 +1,18 @@ package com.bobocode.annotation; +import com.bobocode.StringTrimmingConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + /** * Annotation that can be placed on configuration class to import {@link StringTrimmingConfiguration} */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Import(StringTrimmingConfiguration.class) public @interface EnableStringTrimming { -//todo: Implement EnableStringTrimming annotation according to javadoc }