SpringBoot @RestControllerの戻り値を確認

SpringBootの@RestControllerの戻り値を確認するサンプルです。

目次 listを返す場合 / mapを返す場合
クラスを返す場合
リストがあるクラスを返す場合
クラスを持つクラスを返す場合
値をセットしない場合
nullの時に項目を出力しない (JsonInclude.Include.NON_NULL)

listを返す場合

package com.example.demo;

import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

	@GetMapping
	public List<String> output1() {
		List<String> list = new ArrayList<>();
		list.add("赤");
		list.add("黄");
		list.add("青");
		return list;
	}
}

13行目は、ArrayListを使用しています。
上記コードを実行すると以下のJSONが返ります。

[
    "赤",
    "黄",
    "青"
]

mapを返す場合

package com.example.demo;

import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

	@GetMapping
	public Map<String,String> output1() {
		Map<String,String> map1 = new HashMap<>();
		map1.put("a", "赤");
		map1.put("b", "黄");
		map1.put("c", "青");
		return map1;
	}
}

13行目は、HashMapを使用しています。
上記コードを実行すると以下のJSONが返ります。

{
    "a": "赤",
    "b": "黄",
    "c": "青"
}

クラスを返す場合

データをセットするSyainクラスです。

package com.example.demo;

public class Syain {
	private  int id;
	private  String name;
	private  String romaji;
	
	// setterとgetterは省略
}

Syainクラスにデータをセットして返します。

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

	@GetMapping
	public Syain output1() {
		Syain s1 = new Syain();
		s1.setId(101);
		s1.setName("鈴木");
		s1.setRomaji("suzuki");
		return s1;
	}
}

Syainクラスのインスタンスを生成して値をセットし15行目でインスタンスを返します。

上記コードを実行すると以下のJSONが返ります。

{
    "id": 101,
    "name": "鈴木",
    "romaji": "suzuki"
}

JSONのオブジェクトの中に値が生成されます。

リストがあるクラスを返す場合

7行目はリストでUserクラスのインスタンスを格納します。

package com.example.demo;

import java.util.List;

public class AppManager {
	String appNo;
	List<User> userList;
	
	public String getAppNo() {
		return appNo;
	}
	public List<User> getUserList() {
		return userList;
	}
	public void setAppNo(String appNo) {
		this.appNo = appNo;
	}
	public void setUserList(List<User> userList) {
		this.userList = userList;
	}
}

リストに格納するUserクラスです。

package com.example.demo;

public class User {
	private  int id;
	private  String name;
	
	// setterとgetterは省略
}

JSONを返すコードです。

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

	@GetMapping
	public AppManager output1() {
		AppManager a1 = new AppManager();
		a1.setAppNo("001");
		User us1 = new User();
		us1.setId(101);
		us1.setName("suzuki");
		User us2 = new User();
		us2.setId(102);
		us2.setName("sato");
		
		List<User> list1 = new ArrayList<>();
		list1.add(us1);
		list1.add(us2);
		a1.setUserList(list1);
		return a1;
	}
}

Userクラスのインスタンスを2つ生成し、23行目でSyainクラスのインスタンスにセットしています。
18行目は、値にnullをセットしています。
17,19行目は、コメントにして項目に値をセットしていません。

上記コードを実行すると以下のJSONが返ります。

{
    "appNo": "001",
    "userList": [
        {
            "id": 101,
            "name": "suzuki"
        },
        {
            "id": 102,
            "name": "sato"
        }
    ]
}

3行目以降はJSONの配列になっています。

クラスを持つクラスを返す場合

7行目はUserクラスのインスタンスを格納します。

package com.example.demo;

public class AppManager {
	String appNo;
	User user;
	
	public String getAppNo() {
		return appNo;
	}
	public User getUser() {
		return user;
	}
	public void setAppNo(String appNo) {
		this.appNo = appNo;
	}
	public void setUser(User user) {
		this.user = user;
	}
}

Userクラスです。

package com.example.demo;

public class User {
	private  int id;
	private  String name;
	
	// setterとgetterは省略}
}

JSONを返すコードです。

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

	@GetMapping
	public AppManager output1() {
		AppManager a1 = new AppManager();
		a1.setAppNo("001");
		User us1 = new User();
		us1.setId(101);
		us1.setName("suzuki");
		a1.setUser(us1);
		return a1;
	}
}

上記コードを実行すると以下のJSONが返ります。

{
    "appNo": "001",
    "user": {
        "id": 101,
        "name": "suzuki"
    }
}

3行目以降はJSONのオブジェクトになっています。

値をセットしない場合

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

	@GetMapping
	public AppManager output1() {
		AppManager a1 = new AppManager();
		a1.setAppNo("001");
		User us1 = new User();
//		us1.setId(101);
//		us1.setName("suzuki");
		User us2 = new User();
		us2.setId(102);
		us2.setName(null);
		
		List<User> list1 = new ArrayList<>();
		list1.add(us1);
		list1.add(us2);
		a1.setUserList(list1);
		return a1;
	}
}

17,18行目は、コメントにして項目に値をセットしていません。
21行目は、nullをセットしています。

上記コードを実行すると以下のJSONが返ります。

{
    "appNo": "001",
    "userList": [
        {
            "id": 0,
            "name": null
        },
        {
            "id": 102,
            "name": null
        }
    ]
}

5行目は、値が0になっています。
6,10行目は、値がnullになっています。

nullの時に項目を出力しない (JsonInclude.Include.NON_NULL)

@JsonInclude(JsonInclude.Include.NON_NULL)
package com.example.demo;

import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;

//@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
	private  int id;
	@JsonInclude(JsonInclude.Include.NON_NULL)
	private  String name;
	private  List<String> sikaku;
	
}

nullの時にJSONとして出力しない項目の上にJsonIncludeのアノテーションを追加します。
6行目のようにクラスの上に付けた場合は、クラスのメンバのどれかがnullの場合その項目は出力されなくなります。

関連の記事

SpringBoot フォームの値を別画面に渡す

△上に戻る