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

Java Spring Boot控制器如何按业务条件返回205等不同HTTP响应码

Spring Boot接口条件自定义响应状态码解决方案

以下是两种可直接落地的实现方式:

方案1:使用ResponseEntity封装返回值(推荐)

这是Spring官方推荐的动态设置状态码方案,逻辑清晰无额外依赖,仅需调整方法返回类型即可:

@RequestMapping(value = "/profiles/me", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<UserDto> updateProfile(@RequestBody @Validated(ProfileValidation.class) UserDto userDto)
        throws Exception {
    // 原有业务逻辑不变
    user = userService.updateProfile(userDto);
    token = authenticatedService.getToken();
    if("NOT_ACTIVATED".equals(user.getAccountStatus())){
        token = authenticationService
            .generateNewSession(new UserAuth.Builder().userId(user.getAcquirerId())
                    .accountStatus(user.getAccountStatus()).role(user.getRole()).build());
        // 条件满足时返回205状态码+响应体
        return new ResponseEntity<>(DtoAssembler.assemble(user, token), HttpStatus.RESET_CONTENT);
    }
    // 默认返回200状态码+响应体
    return ResponseEntity.ok(DtoAssembler.assemble(user, token));
}

其中HttpStatus.RESET_CONTENT是Spring封装的205状态码枚举,无需手动写硬编码数字。

方案2:注入HttpServletResponse直接设置状态码

如果不想修改原有方法的返回类型,可以直接注入HttpServletResponse对象手动修改状态码:

@RequestMapping(value = "/profiles/me", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public UserDto updateProfile(@RequestBody @Validated(ProfileValidation.class) UserDto userDto, HttpServletResponse response)
        throws Exception {
    user = userService.updateProfile(userDto);
    token = authenticatedService.getToken();
    if("NOT_ACTIVATED".equals(user.getAccountStatus())){
        token = authenticationService
            .generateNewSession(new UserAuth.Builder().userId(user.getAcquirerId())
                    .accountStatus(user.getAccountStatus()).role(user.getRole()).build());
        // 直接设置响应状态码为205
        response.setStatus(HttpServletResponse.SC_RESET_CONTENT);
    }
    return DtoAssembler.assemble(user, token);
}

注意:原代码中字符串比较使用==是错误用法,需替换为equals方法,否则可能出现字符串值相等但判断不通过的问题;205状态码语义为「重置内容」,请确保和业务场景匹配,避免语义混用导致前端处理异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:00