【问题标题】:Remove brackets [ ] from json response从 json 响应中删除括号 []
【发布时间】:2021-12-22 00:53:41
【问题描述】:

一个 api 返回 {"authorities": [{"authority": "Employee"}]}

我想删除 [ ]

@RequestMapping(value=/"autho", method="GET", produces=APPLICATION_JSON_VALUE)
public ResponseEntity getAuthorities(final User usr){
    return ResponseEntity.ok(new GetAuthorityResponse(usr.getAuthorities()));
}

这里的 getAuthorities() 来自 Collection<GrantedAuthority> 类型的 org.springframework.security。 GetAuthorityResponse 从Collection<GrantedAuthority> 转换为Collection<CustomAuthority>。 CustomAuthority 是一个枚举。

@JsonFormat(shape=JsonFormat.Shape.OBJECT)
public enum CustomAuthority implements GrantedAuthority{
EMPLOYEE("EMPLOYEE"), EMPLOYEE1("EMPLOYEE1");
private final string authority;
// Constructor and getter
}

更新:此错误已在之前的 sprint 中解决。它被错误地重新分配。

【问题讨论】:

  • 如果响应可能返回多个权限,为什么要删除集合层?
  • 名称getAuthorities表示会返回多个值,所以需要一个集合。如果您只想返回一个授权,请更改数据模型。
  • @Thomas 删除收集层是指括号吗?如果是,那么只是一个来自积压的错误修复,其中 json 响应不应该是一个数组。
  • @f1sh 感谢您的评论。但它可以返回多个值。
  • 那么您不能简单地删除 [ ],因为它们代表 JSON 中的列表。

标签: java json spring spring-security


【解决方案1】:

我认为 JSON 存在一些混淆。 {“权威”:[{“权威”:“员工”}]} [] 标记一个集合。这意味着它封装了一个“权限列表”。这很有用,因为您的 JSON 对象可以存储 多个 权限。 例如:

{"authorities": [ {"authority": "Employee"}, {"authority": "CEO"},{"authority": "Admin"},{"authority": "Customer"} ]
}

如果您想删除 [ ]

如果您的用例强制您从 JSON 对象中删除集合,有一些简单的方法可以做到这一点。

  1. 如果您可以控制 REST API,则可以将其更改为不返回集合。但是,不建议这样做,因为它很可能会破坏某些东西。如果您要这样做,请与您的团队一起进行。
  2. 当 API 返回 JSON 对象时,您可以为给定的 JSON 对象创建一个新的 JSON 对象,并获取集合中的第一项并将其存储为普通 JSON 值。我不知道您为什么需要这样做,收集似乎很棒,但如果必须这样做,那将是解决您的问题的一种乏味方式。

我希望这会有所帮助!有问题可以问哦~

【讨论】:

  • 感谢您的回答。您现在可以查看更新的问题。
  • @Adil 没问题!很高兴它得到了修复。得到一个已经固定的任务总是很有趣?
猜你喜欢
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多