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のテーブル表示してみます。


