gpt4 book ai didi

json - Spring Boot中的角色基础Json输出

转载 作者:行者123 更新时间:2023-12-01 00:19:54 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com