如何在Spring Boot的控制器Controll中输出任意格式的JSON数据,如果使用统一封装的出口类很不灵活,在牺牲编码间接性的情况下,
可以用一下方式处理。

我们以User.class为实例

// Lombook注解
@Data
public class User {
    private Long id;
    private String username;
    private String password;
}
  1. 希望接口返回的几种数据格式

创建一个测试控制器 UserController.class,要求分别返回如下格式字段
第一个时User对象

{
    "id": 1,
    "username": "myname",
    "password": "mypassword"
}

第二个是一个List<user>的列表

[{
    "id": 1,
    "username": "myname",
    "password": "mypassword"
}, {
    "id": 2,
    "username": "myname2",
    "password": "mypassword2"
}]

第三个是一个Map<String, Object>对象

{
    "author_information": {
        "id": 1,
        "username": "myname",
        "password": "mypassword"
    },
    "page_url": "http://url_page",
    "fans_count": 4153,
    "blog_url": "http://url_blog"
}

则创建的UserController.class如下

@RestController
@RequestMapping("/user/")
public class UserController {

    @RequestMapping("/info")
    public User getUser() {
        return new User(1, "myname", "mypassword");
    }

    @RequestMapping("/list")
    public List<User> getUserList() {
        List<User> userList = new ArrayList<>();
        User user1 = new User(1, "myname", "mypassword");
        User user2 = new User(2, "myname2", "mypassword2");
        userList.add(user1);
        userList.add(user2);
        return userList;
    }

    @RequestMapping("/map")
    public Map<String, Object> getMap() {
        Map<String, Object> map = new HashMap<>(3);
        User user = new User(1, "myname", "mypassword");
        map.put("author_information", user);
        map.put("page_url", "http://url_page");
        map.put("blog_url", "http://url_blog");
        map.put("fans_count", 4153);
        return map;
    }
}

如果没有特殊要求,可以只使用Map这种结构,足以生成丰富的JSON格式类型,应对绝大部分需求。

Tags: springboot

Related Posts:

Leave a Comment