Spring Data Rest - 公开ID

时间:2017-04-27 17:23:03

标签: json spring spring-rest

我试图使用Spring Data Rest在Json响应上公开我的域的Id,除了将它放在self对象上。我尝试在互联网上看到的东西,但它不起作用。我正在使用Spring Boot,这是我的起始类和我的配置类,用于公开Id。

package com.desingfreed;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.designfreed")
public class GaliasBackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(GaliasBackendApplication.class, args);
    }
}

package com.desingfreed.config;

import com.desingfreed.domain.Articulo;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;
import org.springframework.stereotype.Component;

@Component
public class ConfigurationRest extends RepositoryRestConfigurerAdapter {
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.exposeIdsFor(Articulo.class);
    }
}

package com.desingfreed.repositories;

import com.desingfreed.domain.Articulo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

@RepositoryRestResource(collectionResourceRel = "articulos", path = "articulos")
public interface ArticuloRepository extends CrudRepository<Articulo, Long> {
}

package com.desingfreed.domain;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "STA11")
public class Articulo {
    @Id
    @GeneratedValue
    @Column(name = "ID_STA11")
    private Long id;

    @Column(name = "COD_ARTICU")
    private String codigo;

    @Column(name = "DESCRIPCIO")
    private String descripcion;

//    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "articulo")
//    private List<Precio> precios = new ArrayList<>();

    public Articulo() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

//    public List<Precio> getPrecios() {
//        return precios;
//    }
//
//    public void setPrecios(List<Precio> precios) {
//        this.precios = precios;
//    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Articulo articulo = (Articulo) o;

        if (id != null ? !id.equals(articulo.id) : articulo.id != null) return false;
        if (codigo != null ? !codigo.equals(articulo.codigo) : articulo.codigo != null) return false;
        return descripcion != null ? descripcion.equals(articulo.descripcion) : articulo.descripcion == null;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (codigo != null ? codigo.hashCode() : 0);
        result = 31 * result + (descripcion != null ? descripcion.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Articulo{" +
                "id=" + id +
                ", codigo='" + codigo + '\'' +
                ", descripcion='" + descripcion + '\'' +
                '}';
    }
}

虽然这样做我仍然可以获得Json响应的Id,但我仍然会这样:

"_embedded" : {
    "articulos" : [ {
      "codigo" : "111012082",
      "descripcion" : "VIRGEN LEV. FRESCA X 500G",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/articulos/1"
        },
        "articulo" : {
          "href" : "http://localhost:8080/articulos/1"
        }
      }

非常感谢!

1 个答案:

答案 0 :(得分:1)

为您提供信息,我创建了一个简单的组件来动态公开每个id。

<properties>
  <childA.version>1.3.0</childA.version>
</properties>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.dev.bla</groupId>
      <artifactId>childA</artifactId>
      <version>${childA.version}</version>
    </dependency>
</...>