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は冗長なアクセッサーやコンストラクタの記述をアノテーションで自動生成してくれるため、便利です。
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(笑)
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文字列として送信することができます。
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を入力するだけで、送信されなくなります。
@Column(name="password") @JsonIgnore private String password;
すごい便利!!次回は、JSONの受信をやりたいと思います。
<おまけ>
GETで実装確認をしましたが、多くはPOSTやPUTなどの実装確認になるとおもいます。
POST通信などの検証に下記ツールがFreeで直感的に使用できたのでリンクはります。
Postman: https://www.getpostman.com/
次回は、Javaから送信されたJSONデータをHTMLのテーブル表示してみます。