1. 概要
Groovy SpringWebアプリケーションで使用したい機能がいくつかあります。
したがって、このチュートリアルでは、Spring BootとGroovyを使用して簡単なtodoアプリケーションを作成します。 また、それらの統合ポイントについても説明します。
2. Todoアプリケーション
このアプリケーションには、次の機能があります。
- タスクを作成する
- タスクの編集
- タスクを削除
- 特定のタスクを表示
- すべてのタスクを表示
これはRESTベースのアプリケーションであり、ビルドツールとしてMavenを使用します。
2.1. Mavenの依存関係
pom.xmlファイルに必要なすべての依存関係を含めましょう。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>runtime</scope>
</dependency>
ここでは、を含めてspring -boot-starter-webを使用してRESTエンドポイントを構築し、groovy依存関係をインポートしてプロジェクトにGroovyサポートを提供しています。
永続層にはspring-boot-starter-data-jpaを使用しており、h2は組み込みデータベースです。
また、 pom.xml:にすべての目標を含むgmavenplus-pluginを含める必要があります。
<build>
<plugins>
//...
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.9.0</version>
<executions>
<execution>
<goals>
<goal>addSources</goal>
<goal>addTestSources</goal>
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>generateTestStubs</goal>
<goal>compileTests</goal>
<goal>removeStubs</goal>
<goal>removeTestStubs</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.2. JPAエンティティクラス
id、task、isCompletedの3つのフィールドを持つ単純なTodoGroovyクラスを作成しましょう。
@Entity
@Table(name = 'todo')
class Todo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id
@Column
String task
@Column
Boolean isCompleted
}
ここで、idフィールドはタスクの一意の識別子です。 task にはタスクの詳細が含まれ、isCompletedはタスクが完了したかどうかを示します。
フィールドへのアクセス修飾子を提供しない場合、Groovyコンパイラーはそのフィールドをプライベートとして作成し、そのフィールドのゲッターメソッドとセッターメソッドも生成することに注意してください。
2.3. 永続性レイヤー
Groovyインターフェースを作成しましょう– JpaRepositoryを実装するTodoRepository。 アプリケーションのすべてのCRUD操作を処理します。
@Repository
interface TodoRepository extends JpaRepository<Todo, Integer> {}
2.4. サービスレイヤー
TodoServiceインターフェースには、CRUD操作に必要なすべての抽象メソッドが含まれています。
interface TodoService {
List<Todo> findAll()
Todo findById(Integer todoId)
Todo saveTodo(Todo todo)
Todo updateTodo(Todo todo)
Todo deleteTodo(Integer todoId)
}
TodoServiceImplは、 TodoService:のすべてのメソッドを実装する実装クラスです。
@Service
class TodoServiceImpl implements TodoService {
//...
@Override
List<Todo> findAll() {
todoRepository.findAll()
}
@Override
Todo findById(Integer todoId) {
todoRepository.findById todoId get()
}
@Override
Todo saveTodo(Todo todo){
todoRepository.save todo
}
@Override
Todo updateTodo(Todo todo){
todoRepository.save todo
}
@Override
Todo deleteTodo(Integer todoId){
todoRepository.deleteById todoId
}
}
2.5. コントローラレイヤー
それでは、@RestControllerであるTodoControllerのすべてのRESTAPIを定義しましょう。
@RestController
@RequestMapping('todo')
public class TodoController {
@Autowired
TodoService todoService
@GetMapping
List<Todo> getAllTodoList(){
todoService.findAll()
}
@PostMapping
Todo saveTodo(@RequestBody Todo todo){
todoService.saveTodo todo
}
@PutMapping
Todo updateTodo(@RequestBody Todo todo){
todoService.updateTodo todo
}
@DeleteMapping('/{todoId}')
deleteTodo(@PathVariable Integer todoId){
todoService.deleteTodo todoId
}
@GetMapping('/{todoId}')
Todo getTodoById(@PathVariable Integer todoId){
todoService.findById todoId
}
}
ここでは、ユーザーがCRUD操作を実行するために呼び出すことができる5つのエンドポイントを定義しました。
2.6. SpringBootアプリケーションのブートストラップ
それでは、アプリケーションの起動に使用されるmainメソッドを使用してクラスを作成しましょう。
@SpringBootApplication
class SpringBootGroovyApplication {
static void main(String[] args) {
SpringApplication.run SpringBootGroovyApplication, args
}
}
Groovyのでは、引数を渡してメソッドを呼び出す場合、括弧の使用はオプションであることに注意してください。これは、上記の例で行っていることです。
また、接尾辞.classはGroovy のどのクラスにも必要ないため、SpringBootGroovyApplicationを直接使用しています。
それでは、このクラスをpom.xmlでstart-classとして定義しましょう。
<properties>
<start-class>com.baeldung.app.SpringBootGroovyApplication</start-class>
</properties>
3. アプリケーションの実行
これで、アプリケーションを実行する準備が整いました。 SpringBootGroovyApplication クラスをJavaアプリケーションとして実行するか、Mavenビルドを実行するだけです。
spring-boot:run
これにより、 http:// localhost:8080 でアプリケーションが起動し、そのエンドポイントにアクセスできるようになります。
4. アプリケーションのテスト
アプリケーションはテストの準備ができています。 Groovyクラス– TodoAppTestを作成してアプリケーションをテストしましょう。
4.1. 初期設定
クラスでAPI_ROOT、 readingTodoId、、writingTodoIdの3つの静的変数を定義しましょう。
static API_ROOT = "http://localhost:8080/todo"
static readingTodoId
static writingTodoId
ここで、API_ROOTにはアプリのルートURLが含まれています。 readingTodoIdとwritingTodoIdは、後でテストを実行するために使用するテストデータの主キーです。
次に、アノテーション @BeforeClass を使用してテストデータを設定することにより、 PopulateDummyData()という別のメソッドを作成しましょう。
@BeforeClass
static void populateDummyData() {
Todo readingTodo = new Todo(task: 'Reading', isCompleted: false)
Todo writingTodo = new Todo(task: 'Writing', isCompleted: false)
final Response readingResponse =
RestAssured.given()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(readingTodo).post(API_ROOT)
Todo cookingTodoResponse = readingResponse.as Todo.class
readingTodoId = cookingTodoResponse.getId()
final Response writingResponse =
RestAssured.given()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(writingTodo).post(API_ROOT)
Todo writingTodoResponse = writingResponse.as Todo.class
writingTodoId = writingTodoResponse.getId()
}
保存するレコードの主キーを格納するために、同じメソッドに変数– readingTodoIdとwritingTodoIdも入力します。
Groovyでは、上記のreadingTodoやwritingTodoのようなBeanに対して行っているように、名前付きパラメーターとデフォルトのコンストラクターを使用してBeanを初期化することもできます。スニペット。
4.2. CRUD操作のテスト
次に、todoリストからすべてのタスクを見つけましょう。
@Test
void whenGetAllTodoList_thenOk(){
final Response response = RestAssured.get(API_ROOT)
assertEquals HttpStatus.OK.value(),response.getStatusCode()
assertTrue response.as(List.class).size() > 0
}
次に、前に入力した readingTodoId を渡して、特定のタスクを見つけましょう。
@Test
void whenGetTodoById_thenOk(){
final Response response =
RestAssured.get("$API_ROOT/$readingTodoId")
assertEquals HttpStatus.OK.value(),response.getStatusCode()
Todo todoResponse = response.as Todo.class
assertEquals readingTodoId,todoResponse.getId()
}
ここでは、補間を使用してURL文字列を連結しました。
さらに、 readingTodoId :を使用して、todoリストのタスクを更新してみましょう。
@Test
void whenUpdateTodoById_thenOk(){
Todo todo = new Todo(id:readingTodoId, isCompleted: true)
final Response response =
RestAssured.given()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(todo).put(API_ROOT)
assertEquals HttpStatus.OK.value(),response.getStatusCode()
Todo todoResponse = response.as Todo.class
assertTrue todoResponse.getIsCompleted()
}
次に、writingTodoId を使用して、ToDoリストのタスクを削除します。
@Test
void whenDeleteTodoById_thenOk(){
final Response response =
RestAssured.given()
.delete("$API_ROOT/$writingTodoId")
assertEquals HttpStatus.OK.value(),response.getStatusCode()
}
最後に、新しいタスクを保存できます。
@Test
void whenSaveTodo_thenOk(){
Todo todo = new Todo(task: 'Blogging', isCompleted: false)
final Response response =
RestAssured.given()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(todo).post(API_ROOT)
assertEquals HttpStatus.OK.value(),response.getStatusCode()
}
5. 結論
この記事では、GroovyとSpring Bootを使用して単純なアプリケーションを構築しました。 また、それらを統合する方法を確認し、Groovyの優れた機能のいくつかを例を挙げて示しました。
いつものように、例の完全なソースコードは、GitHubでから入手できます。