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

Spring Boot中使用CrudRepository如何去除响应中的额外_links JSON属性

去除Spring Boot中CrudRepository响应JSON的_links属性

这个_links属性其实是Spring HATEOAS生成的HAL(超文本应用语言)格式的一部分,当你使用Spring Data REST自动暴露CrudRepository接口时,默认会返回这种带链接的HAL格式JSON,目的是为客户端提供REST交互的导航能力。如果不需要这个属性,可以通过以下几种方式解决:

方案一:自己编写Controller,手动返回实体对象

如果你不需要Spring Data REST自动生成的REST端点,最直接的方式就是自己写Controller来处理请求,直接返回实体类对象,这样序列化后的JSON就只会包含你实体里定义的字段,不会有额外的_links。

示例代码:

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserRepository userRepository;

    // 构造注入
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return (List<User>) userRepository.findAll();
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        return userRepository.findById(id)
                .map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
}

方案二:全局禁用HAL格式

如果想继续使用Spring Data REST的自动端点,但全局关闭HAL格式,只返回纯JSON,可以在application.properties(或application.yml)中添加配置:

application.properties

spring.hateoas.use-hal-as-default-json-media-type=false

application.yml

spring:
  hateoas:
    use-hal-as-default-json-media-type: false

配置后,Spring Data REST返回的响应就会是普通的JSON结构,不再包含_links和_embedded。

方案三:在实体类上忽略_links属性

通过Jackson的注解,直接在实体类上标记忽略_links属性,这样序列化时会自动跳过该字段:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties({"_links"})
public class User {
    private Long id;
    private String user_name;

    // getter、setter、构造方法等
}

方案四:使用自定义Projection(针对Spring Data REST)

如果只想暴露实体的部分字段,同时去掉_links,可以定义一个Projection接口,指定需要返回的字段,然后在Repository上配置使用这个Projection:

1. 定义Projection接口

import org.springframework.data.rest.core.config.Projection;

@Projection(name = "userBasic", types = User.class)
public interface UserBasicProjection {
    // 只暴露你需要的字段
    String getUser_name();
}

2. 在Repository上配置默认Projection

import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

@RepositoryRestResource(excerptProjection = UserBasicProjection.class)
public interface UserRepository extends CrudRepository<User, Long> {
}

这样Spring Data REST返回的响应就只会包含Projection中定义的字段,不会有_links。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:39:46