You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理Controller返回原生ResponseEntity的Raw types usage警告

问题描述

编写了两个用于触发工作流记录操作的POST接口,执行完对应服务逻辑后统一返回200成功响应,原始实现代码如下:

/**
 * Initiate some workflow.
 *
 * @param recordsBulkInitiate records to initiate
 * @return {@link ResponseEntity}
 */
@ApiOperation(value = "initiate workflow")
@PostMapping("/initiate")
public ResponseEntity bulkInitiateRecords(@RequestBody InitiateBulkRecordsDto recordsBulkInitiate) {
    workflowService.bulkInitiate(recordsBulkInitiate);
    return ResponseEntity.ok(OK);
}

/**
 * Submit some workflow action on arecord
 *
 * @param workflowActionDto the record action data
 * @return {@link ResponseEntity}
 */
@ApiOperation(value = "action taken by user")
@PostMapping("/action")
public ResponseEntity submitAction(@RequestBody WorkflowActionDto workflowActionDto) {
    log.info("submit action on record [{}]", workflowActionDto);
    workflowService.submitRecordAction(workflowActionDto);
    return ResponseEntity.ok(OK);
}

上述代码在SonarLint、IntelliJ IDEA中会触发*Raw types should not be used(不应使用原始类型)*警告。临时使用ResponseEntity<Object>的写法可以规避警告,但语义不规范,属于临时兼容方案,需要符合编码规范的正确处理方式。

规范处理方案

根据接口实际返回逻辑选择对应泛型类型即可,不需要用Object这种模糊的泛型声明:

  • 接口不需要返回自定义业务响应体,仅返回200状态码时,使用ResponseEntity<Void>作为返回类型
    Void是Java中专门用于标识无返回值的引用类型,完全满足泛型校验规则,方法签名可以清晰告知调用方该接口无有效响应体,不存在语义歧义。
    修改后的代码示例:
    /**
     * Initiate some workflow.
     *
     * @param recordsBulkInitiate records to initiate
     * @return {@link ResponseEntity}
     */
    @ApiOperation(value = "initiate workflow")
    @PostMapping("/initiate")
    public ResponseEntity<Void> bulkInitiateRecords(@RequestBody InitiateBulkRecordsDto recordsBulkInitiate) {
        workflowService.bulkInitiate(recordsBulkInitiate);
        // 无响应体场景用build()构造空body的ok响应即可
        return ResponseEntity.ok().build();
    }
    
    /**
     * Submit some workflow action on arecord
     *
     * @param workflowActionDto the record action data
     * @return {@link ResponseEntity}
     */
    @ApiOperation(value = "action taken by user")
    @PostMapping("/action")
    public ResponseEntity<Void> submitAction(@RequestBody WorkflowActionDto workflowActionDto) {
        log.info("submit action on record [{}]", workflowActionDto);
        workflowService.submitRecordAction(workflowActionDto);
        return ResponseEntity.ok().build();
    }
    
    提示:如果业务允许返回204无内容状态码,也可以直接写return ResponseEntity.noContent().build();,语义更精准。
  • 接口需要返回固定结构的通用成功响应(比如包含code、message字段的统一返回包装类)时,直接将通用响应类作为泛型参数
    比如项目中定义了统一响应类ApiResponse,常量OK为ApiResponse类型的成功实例,直接将返回值声明为ResponseEntity<ApiResponse>即可,既符合泛型规范,也能清晰告知调用方响应体结构。
为什么不推荐ResponseEntity<Object>

ResponseEntity<Object>虽然能绕过静态检查的原始类型警告,但语义上表示响应体可以是任意Java对象,和接口实际的返回逻辑完全不匹配,后续维护人员无法从方法签名判断接口响应格式,会增加不必要的维护成本。


内容的提问来源于stack exchange,提问作者saran3h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:57:20