use*_*372 3 json spring-mvc jackson spring-boot
是否可以JsonProperties根据定义的条件排除Spring Boot Rest调用的输出?(例如,用户的角色)
例:
public class Employee{
@JsonProperty
private String name;
@JsonProperty
private String fieldForManagerOnly;
@JsonProperty
private String fieldForEmployeeOnly;
}
Run Code Online (Sandbox Code Playgroud)
fieldForManagerOnly当用户拥有ROLE时,我希望在JSON输出中只有序列化manager.
我已经尝试了解决方案@JsonView(如Spring中最新杰克逊集成改进中所述),但该解决方案非常有限,因为@JsonView绑定到一个控制器方法,我想只有一个控制器方法.
我自己解决了这个问题.我使用了JsonView解决方案而不是注释,而是从代码中选择JsonView.
首先,您需要一个视图界面.
public class JsonViews {
public interface EmployeeView {}
public interface ManagerView {}
}
Run Code Online (Sandbox Code Playgroud)
使用@JsonView注释标记Model类中的字段.
public class Employee{
@JsonProperty
private String name;
@JsonView(JsonViews.ManagerView.class)
private String fieldForManagerOnly;
@JsonView(JsonViews.EmployeeView.class)
private String fieldForEmployeeOnly;
}
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,根据角色(或其他一些条件)设置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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |