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は冗長なアクセッサーやコンストラクタの記述をアノテーションで自動生成してくれるため、便利です。

AccountEntity.java
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(笑)

AccountRepository.java
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文字列として送信することができます。

AccountController.java
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を入力するだけで、送信されなくなります。

AccountEntity.java
1
2
3
@Column(name="password")
@JsonIgnore
private String password;

すごい便利!!次回は、JSONの受信をやりたいと思います。
<おまけ>
GETで実装確認をしましたが、多くはPOSTやPUTなどの実装確認になるとおもいます。
POST通信などの検証に下記ツールがFreeで直感的に使用できたのでリンクはります。
Postman: https://www.getpostman.com/

次回は、Javaから送信されたJSONデータをHTMLのテーブル表示してみます。

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