Spring引导中基于角色的Json输出
是否可以根据定义的条件在Spring引导Rest调用的输出中排除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; }
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);
}