json - Spring Boot中的角色基础Json输出

标签 json spring-mvc spring-boot jackson

是否可以根据定义的条件在 Spring Boot Rest 调用的输出中排除 JsonProperties? (例如用户的角色)

例子:

public class Employee{

    @JsonProperty
    private String name;
    @JsonProperty
    private String fieldForManagerOnly;
    @JsonProperty
    private String fieldForEmployeeOnly;

}

当用户具有角色 manager 时,我希望仅在 JSON 输出中序列化 fieldForManagerOnly

我已经尝试过使用 @JsonView 的解决方案(如 Latest Jackson integration improvements in Spring 中所述),但该解决方案非常有限,因为 @JsonView 绑定(bind)到一个 Controller 方法,我只想有一个 Controller 方法。

最佳答案

我自己解决了这个问题。我使用了 JsonView 解决方案,但我从代码中选择了 JsonView 而不是注释。

首先你需要一个 View 接口(interface)。

public class JsonViews {

    public  interface EmployeeView {}
    public  interface ManagerView {}

}

使用@JsonView 注解标记 Model 类中的字段。

public class Employee{

    @JsonProperty
    private String name;

    @JsonView(JsonViews.ManagerView.class)
    private String fieldForManagerOnly;

    @JsonView(JsonViews.EmployeeView.class)
    private String fieldForEmployeeOnly;

}

在您的 Controller 中,根据角色(或其他条件)设置要使用的 JsonView:

@RequestMapping(value = "/{employeeId}", method = RequestMethod.GET)
public ResponseEntity<MappingJacksonValue> getEmployee(@PathVariable long employeeId) {
    Employee employee = employeeService.getEmployee(employeeId);
    MappingJacksonValue jacksonValue = new MappingJacksonValue(employeeResourceAssembler.toResource(employee));

    if (getRole().equals("MANAGER")) {
        jacksonValue.setSerializationView(JsonViews.ManagerView.class);
    } else if (getRole().equals("EMPLOYEE")) {
        jacksonValue.setSerializationView(JsonViews.EmployeeView.class);
    }

    return new ResponseEntity<>(jacksonValue, HttpStatus.OK);
}

关于json - Spring Boot中的角色基础Json输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35824751/

相关文章:

javascript - Dropbox + Chrome 扩展 Oauth 接收器

javascript - Node.js JSON.parse 关于对象创建与使用 getter 属性

javascript - 使用 flot、json 系列绘制时间

javascript - 如何使用 JSON 并通过 D3 返回数据

java - 为互斥请求参数设计 API 的更好方法是什么?

java - 当我尝试发布到我的 spring api 时 403 被禁止?

Spring MVC 在 session 中保存用户数据

java - Spring Security 拦截 url 究竟是如何工作的?

java - 使用 Thymeleaf 渲染 HTML 模板时出错 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor'

java - 使用 'fetch.into(MyClass.class)'时jOOQ配置为空