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

Spring Controller PUT接口如何移除201状态码并保留200、401、404等状态码

Spring PUT接口固定返回200状态码的解决方案

首先排查@ResponseStatus不生效的常见原因

  • 确认你导入的HttpStatus是org.springframework.http.HttpStatus包下的类,避免导错包导致注解不生效
  • 检查项目中是否存在全局@ControllerAdvice、ResponseBodyAdvice实现类,或者自定义拦截器,这类全局组件可能会强制改写PUT请求的响应状态码为默认201
  • 如果项目集成了Spring Data REST类的REST自动配置组件,这类组件默认会对PUT/POST请求的响应状态做统一处理,注解优先级低于全局配置

最优解决方法:使用ResponseEntity显式指定状态码

这种方式优先级最高,不会被全局配置覆盖,完全可控,调整后的代码示例如下:

@PutMapping("/entry/user")
public ResponseEntity<UpdatingVO> userEntry(@RequestBody UpdateDtsVO updateDtsVO) { // 补充你遗漏的方法入参定义
    UpdatingVO update = new UpdatingVO();  
    try{
        update = service.allowUser(updateDtsVO);   
    } catch(Exception e){
        update.setErrorMessage(e.getMessage());   
        update.setStatus(UserConstant.FAILURE);
    }
    return ResponseEntity.ok(update); // 显式指定返回200状态码
}

采用这种方式的同时,401、404这类由Spring安全框架、Web MVC原生抛出的异常状态码不会被覆盖,完全符合你的需求。

其他可选调整方案

如果坚持使用@ResponseStatus注解,可以先关闭对应PUT请求的全局状态码覆盖配置,以Spring Data REST为例,在配置类中添加以下配置:

@Configuration
public class RestConfig implements RepositoryRestConfigurer {
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
        config.setReturnBodyForPutAndPatch(true);
        // 禁用PUT请求默认返回201的配置
        config.getItemResourceDescription().getPutItemDescription().setStatusCode(HttpStatus.OK);
    }
}

注意:这种方式需要适配你当前项目使用的REST框架配置,通用性不如ResponseEntity方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:15:03