是否可以根据定义的条件在 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/