欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

SpringMVC使用JsonView针对统一实体返回不同信息

时间:2022-08-05 11:44:02|栏目:JAVA代码|点击:

一、随便说说

项目中不同的接口需要返回不同的信息,而信息一般通过不同的对象实例去承载。例如有接口A和接口B,A需要返回不包含用户地址的用户信息,
而B需要返回包含用户地址的用户信息,其它信息和A的返回信息一致。

这个时候应该建立两个不同的用户类,一个包含address,一个不包含,这样做显然是麻烦的,那么JsonView就可以帮你很优雅的解决这个问题。

接下来就直接开始撸代码了。

二、User信息载体类

public class UserDTO {
    //不显示地址
    public interface CommonView {}
    //显示地址
    public interface AdminView extends commonView {}
    @JsonView(value = CommonView.class)
    private String username;
    @JsonView(value = AdminView.class )
    private String address;
    //Getter Setter ...
}

1.接口是public的

2.在类中写两个内部接口,分别标志不同的返回属性。接口是可以相互继承的,例如AdminView继承了CommonView,那么相当于AdminView包含了commonView标记的属性。

    CommonView --> username

    AdminView |--> password
              |--> CommonView --> username

三、UserController的写法

在需要返回不同视图的方法上加上@JsonView注解,注解中的value属性填写我们在UserDTO中定义的代表不同标记的接口类即可。

@RestController
@RequestMapping(value = "/user")
public class UserController {
    /**
     * 返回普通视图,不带地址
     * @return
     */
    @GetMapping(value = "/common")
    @JsonView(value = UserDTO.CommonView.class)
    public UserDTO getCommonView() {
        return new UserDTO("kingboy", "北京");
    }
    /**
     * 返回管理员视图,显示地址
     * @return
     */
    @GetMapping(value = "/admin")
    @JsonView(value = UserDTO.AdminView.class)
    public UserDTO getAdminView() {
        return new UserDTO("kingboy", "北京");
    }
}

访问localhost:8080/user/common返回

{
"username": "kingboy"
}

访问lcoalhost:8080/user/admin返回

{
"username": "kingboy",
"address": "北京"
}

上一篇:使用logback实现日志打印过滤

栏    目:JAVA代码

下一篇:@MapperScan和@ComponentScan一块使用导致冲突的解决

本文标题:SpringMVC使用JsonView针对统一实体返回不同信息

本文地址:http://www.codeinn.net/misctech/209927.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有