Spring引导中基于角色的Json输出

Spring引导中基于角色的Json输出,json,spring-mvc,spring-boot,jackson,Json,Spring Mvc,Spring Boot,Jackson,是否可以根据定义的条件在Spring引导Rest调用的输出中排除JsonProperties?(例如,用户的角色) 例如: public class Employee{ @JsonProperty private String name; @JsonProperty private String fieldForManagerOnly; @JsonProperty private String fieldForEmployeeOnly; }

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

例如:

public class Employee{

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

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


我已经用
@JsonView
(如中所述)尝试了该解决方案,但该解决方案非常有限,因为
@JsonView
绑定到一个控制器方法,我只希望有一个控制器方法

@JsonInclude(JsonInclude.Include.NON_NULL)

如果当前用户不是经理,请确保将字段
fieldformanagerly
设置为
null

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

首先,您需要一个视图界面

public class JsonViews {

    public  interface EmployeeView {}
    public  interface ManagerView {}

}
用@JsonView注释标记模型类中的字段

public class Employee{

    @JsonProperty
    private String name;

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

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

}
在控制器中,根据角色(或其他条件)设置要使用的JsonView:

@RequestMapping(value=“/{employeeId}”,method=RequestMethod.GET)
public ResponseEntity getEmployee(@PathVariable long employeeId){
Employee=employeeService.getEmployee(employeeId);
MappingJacksonValue jacksonValue=新的MappingJacksonValue(EmployeeResourcesAssembler.toResource(employee));
if(getRole().equals(“MANAGER”)){
setSerializationView(JsonViews.ManagerView.class);
}else if(getRole().equals(“EMPLOYEE”)){
setSerializationView(JsonViews.EmployeeView.class);
}
返回新的响应状态(jacksonValue,HttpStatus.OK);
}

这是一个我不知道的很好的解决方案。你得到了我的支持。类似于我在这里的解决方法:
@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);
}