Java Spring Boot JSON 送受信①~送信偏~

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

タイトルとURLをコピーしました