是否可以根据定义的条件在Spring Boot Rest调用的输出中排除JsonProperties
? (例如,用户的角色)
示例:
public class Employee{
@JsonProperty
private String name;
@JsonProperty
private String fieldForManagerOnly;
@JsonProperty
private String fieldForEmployeeOnly;
}
当用户拥有ROLE fieldForManagerOnly
时,我想让manager
仅在JSON输出中序列化。
我已经尝试使用@JsonView
的解决方案(如Latest Jackson integration improvements in Spring中所述)但该解决方案非常有限,因为@JsonView
绑定到一个控制方法,我想要只有一种控制器方法。
答案 0 :(得分:9)
我自己解决了这个问题。我使用了JsonView解决方案而不是注释,而是从代码中选择JsonView。
首先,您需要一个视图界面。
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;
}
在您的控制器中,根据角色(或其他一些条件)设置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);
}
答案 1 :(得分:0)
使用
注释字段@JsonInclude(JsonInclude.Include.NON_NULL)
如果当前用户不是经理,请务必将字段fieldForManagerOnly
设置为null
。