【问题标题】:AngularJS Spring sort field namesAngularJS Spring 排序字段名称
【发布时间】:2015-06-05 08:33:20
【问题描述】:

我正在开发一个应用程序,前端使用 AngularJS,后端使用 Spring。

我主要有两个实体类:

@Entity
public class Project implements Serializable {

private static final long serialVersionUID = 1L;


/**
 * idProject
 */
@Id
@GeneratedValue(strategy=AUTO, generator="PROJECT_SEQ")    
private Integer idProject;


/**
 * name
 */
@Column(name="PROJECT_NAME")
private String name;


/**
 * date
 */
@Column(name="PROJECT_DATE")
private Date date;


/**
 * technology
 */
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="ID_TECHNOLOGY", nullable=true)
@ForeignKey(name = "FK_PROJECT_TECHNOLOGY")
private Technology technology;

@Entity
public class Technology implements Serializable {

 /**
 * idTechnology
 */
@Id
@Column(name="ID_TECHNOLOGY", length=2)
private Integer idTechnology;


/**
 * ID = 0 ==> "TechA"
 * ID = 1 ==> "TechB";
 * ID = 2 ==> "TechC";
 * ID = 3 ==> "TechD";
 * ID = 4 ==> "TechE"
 */
@Column(name="TECHNOLOGY", length=30)
private String technology;

我要做的是,为 AngularJS 应用程序提供项目列表。

为此我创建了一个控制器:

@Autowired
private ProjectAssembler projectAssembler;

@RequestMapping(method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public PagedResources<ProjectResource> findAll(
    @PageableDefault Pageable page,
    PagedResourcesAssembler<Project> assembler) {

    //Request
    Page<Project> projectPage = projectRepo.findAll(page);

    PagedResources<ProjectResource> resources = assembler.toResource(projectPage, projectAssembler);
    return resources;
}

如您所见,我使用 Hateoas 创建 JSON 资源列表并提供浏览链接。除此之外,我正在使用推土机将 Project 类映射到 ProjectAssembler 中的 ProjectResource 类。

public class ProjectResource extends ResourceSupport {

private Integer idProject;
private String projectName;
private Date projectDate;
private String technologyName;

还有汇编器

@Component
public class ProjectResourceAssembler extends ResourceAssemblerSupport<Project, ProjectResource> {

@Autowired
private Mapper dozerBeanMapper;

public ProjectResourceAssembler() {
    super(ProjectController.class, ProjectResource.class);
}

@Override
public ProjectResource toResource(Project entity) {
    ProjectResource resource = createResourceWithId(entity.getIdProject(), entity);
    return resource;
}

@Override
protected ProjectResource instantiateResource(Project entity) {
    return dozerBeanMapper.map(entity, ProjectResource.class);
}

}

目标是我希望前端 AngularJS 应用程序中的字段名称与后端不同。 比如ProjectResources字段就是前端projects表列表的列。

我的问题是当我想在 angularjs 应用程序中使用排序时,我使用前端字段名称,当我想过滤时也是如此,所以当控制器接收到 Page 属性时它不知道排序的字段。

我的问题是:你有什么建议可以帮助我使用 sort 吗?

【问题讨论】:

    标签: javascript angularjs spring model-view-controller hateoas


    【解决方案1】:

    要真正符合 HATEOAS,服务(spring)需要向客户端提供所有超媒体控件(链接)以执行排序。客户端永远不应该按某些数据字段排序......它应该只按服务器向客户端提供的排序选项排序。这种排序本身可能是结果的所有数据字段,但这只是您的用例的偶然性。

    这样服务可以在每个链接中嵌入排序规则。排序规则可以包含后端列名。排序 url 本身对客户端是不透明的。

    我知道这并没有给你一个直接的答案,但你应该能够使用链接构建器来创建适当的排序链接并返回。

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多