spring boot で簡単にJSON送信ができるとのことで早速やってみました。
今回試したことは、DBに登録されている情報をindexにGET通信された際にJSON形式ではきだすといった内容です。
※DBとの連携部分は割愛します。
<開発環境>
Eclipse
Java8
spring boot 2.2.2
JPA
MySQL
Entity Classの作成
内容を保持するEntityを作成します。DBのカラム名と合わせるように記述します。
注意:アクセッサーとコンストラクタを忘れると、406エラーが発生します。spring boot のlombokは冗長なアクセッサーやコンストラクタの記述をアノテーションで自動生成してくれるため、便利です。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.example.image; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @Entity @Table (name= "account" ) @NoArgsConstructor @AllArgsConstructor @Setter @Getter public class AccountEntity { @Id @Column (name= "id" ) @GeneratedValue (strategy=GenerationType.IDENTITY) private Integer id; @Column (name= "username" ) private String userName; @Column (name= "password" ) private String password; @Column (name= "enabled" ) private Boolean enabled; @Column (name= "admin" ) private Boolean admin; } |
DBに処理を与えるRepositoryを作成
SQL文が内包されている便利なJpaRepositoryを継承させてインターフェイスを作成します。
これによって、findAll、findById等よく使用されるメソッドをServiceで実装しなくてもDBとの連携ができるようになります。
脱DaoImple(笑)
1 2 3 4 5 6 7 8 | package com.example.image; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface AccuntRepository extends JpaRepository<AccountEntity, Integer> { } |
Controller Classの作成
Controllerに@ResponseBodyをつけるだけでJSON文字列として送信することができます。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.example.image; import java.util.List; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class AccountController { @Autowired AccuntRepository repository; @RequestMapping (value= "/index" ,method=RequestMethod.GET) @Transactional @ResponseBody public List<AccountEntity> users(){ List<AccountEntity> users = repository.findAll(); return users; } } |
これで、たったこれだけで、localhost:8080/indexにアクセスするとDB情報がJSON形式で受け取られています。
JSONで送りたくない情報がある場合
今回findAllですべての情報をはきだしましたが、中には送りたくない情報もあると思います。
送りたくない情報は、Entityの送りたくないカラム部分に@JsonIgnoreを入力するだけで、送信されなくなります。
1 2 3 | @Column (name= "password" ) @JsonIgnore private String password; |
すごい便利!!次回は、JSONの受信をやりたいと思います。
<おまけ>
GETで実装確認をしましたが、多くはPOSTやPUTなどの実装確認になるとおもいます。
POST通信などの検証に下記ツールがFreeで直感的に使用できたのでリンクはります。
Postman: https://www.getpostman.com/
次回は、Javaから送信されたJSONデータをHTMLのテーブル表示してみます。