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

@RepositoryRestController方法produces设置无效,如何修改响应Content-Type

解决@RepositoryRestController响应Content-Type不符合预期的问题

嘿,这个坑我踩过!先给你明确:@RepositoryRestController确实自带HAL JSON的默认包装逻辑,它是Spring Data REST专门用来返回RESTful资源的控制器,默认会把所有响应都套上HAL的JSON结构,哪怕你在@GetMapping里设置了produces = MediaType.TEXT_PLAIN_VALUE,也会被它的全局处理逻辑覆盖掉。

不过别慌,有几种靠谱的方法能让你拿到想要的text/plain响应头:

方法一:换用普通@Controller(最简单直接)

如果这个returnText方法不需要Spring Data REST的HAL特性(比如资源链接、分页包装这些),直接把控制器注解换成@Controller就搞定了:

@Controller
@RequestMapping(value = "users")
public class UserController {
    // ...其他方法...
    @GetMapping(value = "returnText", produces = MediaType.TEXT_PLAIN_VALUE)
    public String returnText() {
        return "my text";
    }
}

这时候再用Postman调用,响应头的Content-Type就会是text/plain,返回的就是纯文本内容。

方法二:用ResponseEntity手动指定(保留RepositoryRestController特性)

要是你还想保留@RepositoryRestController给其他方法带来的便利,那可以用ResponseEntity手动构建响应,绕过默认的HAL包装:

@RepositoryRestController
@RequestMapping(value = "users")
public class UserController {
    // ...其他方法...
    @GetMapping(value = "returnText")
    public ResponseEntity<String> returnText() {
        return ResponseEntity.ok()
                .contentType(MediaType.TEXT_PLAIN)
                .body("my text");
    }
}

这种方式只针对这个方法生效,其他方法依然可以正常返回HAL JSON。

方法三:全局配置禁用HAL包装(适合全接口调整)

如果你的整个控制器都不需要HAL格式,那可以写个配置类修改Spring Data REST的默认行为:

@Configuration
public class SpringDataRestCustomConfig implements RepositoryRestConfigurer {
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        // 禁用默认的HAL暴露逻辑
        config.disableDefaultExposure();
        // 或者指定媒体类型映射
        config.getMediaTypeMappings().put("text/plain", MediaType.TEXT_PLAIN);
    }
}

不过这个是全局设置,会影响所有@RepositoryRestController的响应,得根据你的实际业务需求来选。

最后再补一句:@RepositoryRestController不是只能返回HAL JSON,只是它默认这么做,通过上面的方法完全可以自定义响应的Content-Type~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:30:52