【问题标题】:JSON response from spring boot rest controller getting repeated来自弹簧引导休息控制器的 JSON 响应重复
【发布时间】:2018-07-02 16:12:06
【问题描述】:

我试图使用 Spring boot 1.5.9.RELEASE 构建一个 rest api 并被困在这个问题上。 对 api 端点的 post 请求工作正常,但是当涉及到 get 请求时,结果会重复。应用程序为获取请求生成的响应是

{"data":["Administrator"]}{"data":["Administrator"]}

关联的请求映射类代码

@RequestMapping("/get")
    public ResponseEntity getAllRoles()throws Exception{

        List<Roles> roles = rolesService.getRoles();
        Set<String> roleNames = new HashSet<>();
        for(Roles r : roles)
            roleNames.add(r.getRoleName());
        return new ResponseEntity(new Response(roleNames), HttpStatus.OK);
    }

响应类

public class Response<T> {

    private T data;

    public Response() {}

    public Response(T data) {
            this.data = data;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

关于如何解决问题的任何想法?提前致谢

【问题讨论】:

  • 您是否调试过代码并确保 List 或 HashSet 不包含两个对象而不是一个对象?
  • 另外,您可以检查新 ResponseEntity 的值并发布吗?我知道你不能两次填充集合,所以我认为你最后做了一些非常奇怪的事情。为什么不明确说明响应实体的类型?此外,无需循环,只需尝试此 Set s = new HashSet(service.getRoles());
  • 将哈希集转换为列表。所以 this.data = new ArrayList(data);。让我知道这是否有效
  • /get 是一个非常有趣的端点选择。只是为了咯咯笑,把它改成别的东西,把@RequestMapping改成@GetMapping

标签: json spring spring-boot jackson


【解决方案1】:

您正在创建两次响应,请在下面使用

RequestMapping("/get")
    public ResponseEntity<?> getAllRoles()throws Exception{

        List<Roles> roles = rolesService.getRoles();
        Set<String> roleNames = new HashSet<>();
        for(Roles r : roles)
            roleNames.add(r.getRoleName());
        return new ResponseEntity<Object>(roleNames, HttpStatus.OK);
    }

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2019-11-09
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多