Hands-On Full Stack Development with Spring Boot 2 and React Second Edition Build modern and scalable full stack applications using Spring Framework 5 and React with Hooks Juha Hinkula BIRMINGHAM - MUMBAI Hands-On Full Stack Development with Spring Boot 2 and React Second Edition Copyright © 2019 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused or alleged to have been caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. Commissioning Editor: Richa Tripathi Acquisition Editor: Shriram Shekhar Content Development Editor: Divya Vijayan Technical Editor: Pradeep Sahu Copy Editor: Safis Editing Project Coordinator: Prajakta Naik Proofreader: Safis Editing Indexer: Pratik Shirodkar Graphics: Jisha Chirayil Production Coordinator: Aparna Bhagat First published: June 2018 Second edition: May 2019 Production reference: 1200519 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-83882-236-1 www.packtpub.com To my wife, Pirre, and daughter, Anni, for their support and the time that I was able to spend with this project. To Ms. Riitta Blomster, for proofreading some difficult parts during the project. To all my motivated students, for inspiring me to continue the lifelong journey of learning. - Juha Hinkula mapt.io Mapt is an online digital library that gives you full access to over 5,000 books and videos, as well as industry leading tools to help you plan your personal development and advance your career. For more information, please visit our website. Why subscribe? Spend less time learning and more time coding with practical eBooks and Videos from over 4,000 industry professionals Improve your learning with Skill Plans built especially for you Get a free eBook or video every month Mapt is fully searchable Copy and paste, print, and bookmark content Packt.com Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.packt.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at [email protected] for more details. At www.packt.com, you can also read a collection of free technical articles, sign up for a range of free newsletters, and receive exclusive discounts and offers on Packt books and eBooks. Contributors About the author Juha Hinkula is a software development lecturer at Haaga-Helia University of Applied Sciences in Finland. He received an MSc degree in computer science from the University of Helsinki. He has over 15 years of industry experience in software development. Over the past few years, he has focused on modern full stack development. He is also a passionate mobile developer with Android-native technology, and nowadays also uses React Native. About the reviewer Krunal Patel has over 10 years of experience in enterprise application development using Java, Spring, Hibernate, and Liferay Portal. He has expertise in domains such as healthcare, insurance, and hospitality. He has executed many enterprise projects based on Liferay Portal that use Elasticsearch and LDAP integration. He was a co-author of Java 9 Dependency Injection, published by Packt Publishing, and also was a technical reviewer for books such as Mastering Apache Solr 7.x and Spring 5.0 Blueprints. He received an ITIL® Foundation Certificate in IT Service Management in 2015, a Liferay 6.1 Developer Certification in 2013, was Brainbench Java 6 certified in 2013, and received a MongoDB for Java Developers certification in 2013. I would like to thank my loving wife, Jigna, my son, Dirgh, and my friends. Thanks to the Packt team, especially Heta and Prajakta, for giving me this opportunity. Packt is searching for authors like you If you're interested in becoming an author for Packt, please visit authors.packtpub.com and apply today. We have worked with thousands of developers and tech professionals, just like you, to help them share their insight with the global tech community. You can make a general application, apply for a specific hot topic that we are recruiting an author for, or submit your own idea. Table of Contents Preface 1 Section 1: Backend Programming with Spring Boot Chapter 1: Setting Up the Environment and Tools - Backend 7 Technical requirements 7 Setting up the environment and tools 8 Installing Eclipse 8 The basics of Eclipse and Maven 8 Creating a project with Spring Initializr 11 How to run the project 13 Spring Boot development tools 19 Logs and problem solving 19 Installing MariaDB 22 Summary 25 Questions 26 Further reading 26 Chapter 2: Dependency Injection 27 Technical requirements 27 Introducing DI 27 DI in Spring Boot 29 Summary 30 Questions 31 Further reading 31 Chapter 3: Using JPA to Create and Access a Database 32 Technical requirements 32 Basics of ORM, JPA, and Hibernate 33 Creating the entity classes 33 Creating CRUD repositories 41 Relationships between tables 47 Setting up the MariaDB database 55 Summary 57 Questions 58 Further reading 58 Chapter 4: Creating a RESTful Web Service with Spring Boot 59 Technical requirements 59 Basics of REST 59 Table of Contents Creating a RESTful web service 61 Using Spring Data REST 67 Summary 75 Questions 75 Further reading 75 Chapter 5: Securing and Testing Your Backend 76 Technical requirements 76 Spring Security 77 Securing your backend using JWT 87 Testing in Spring Boot 96 Creating unit tests 97 Summary 101 Questions 102 Further reading 102 Section 2: Frontend Programming with React Chapter 6: Setting Up the Environment and Tools - Frontend 104 Technical requirements 104 Installing Node.js 105 Installing VS Code 106 VS Code extension 108 Creating and running a React app 110 Modifying a React app 111 Summary 114 Questions 114 Further reading 114 Chapter 7: Getting Started with React 115 Technical requirements 115 Basic React components 116 Basics of ES6 121 Understanding constants 121 Arrow functions 122 Template literals 123 Classes and inheritance 123 JSX and styling 124 Props and the state 125 Component life cycle methods 128 Stateless components 129 React hooks 130 Handling lists with React 134 Handling events with React 135 Handling forms with React 136 [ ii ] Table of Contents Summary 140 Questions 141 Further reading 141 Chapter 8: Consuming the REST API with React 142 Technical requirements 142 Using promises 143 Using the fetch API 145 Using the axios library 146 Practical examples 147 Summary 157 Questions 158 Further reading 158 Chapter 9: Useful Third-Party Components for React 159 Technical requirements 159 Using third-party React components 160 React Table 165 Material-UI component library 170 Routing 177 Summary 180 Questions 180 Further reading 180 Section 3: Full Stack Development Chapter 10: Setting Up the Frontend for Our Spring Boot RESTful Web Service 182 Technical requirements 182 Mocking up the UI 183 Preparing the Spring Boot backend 184 Creating the React project for the frontend 186 Summary 187 Questions 188 Further reading 188 Chapter 11: Adding CRUD Functionalities 189 Technical requirements 189 Creating the list page 190 The delete functionality 198 The add functionality 203 The edit functionality 209 Other functionalities 213 Summary 215 [ iii ]