AngularJS Spring 排序字段名称
AngularJS Spring sort field names
我正在开发一个应用程序,前端部分使用 AngularJS,后端部分使用 Spring。
我主要有两个实体 classes :
@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 class 映射到 ProjectAssembler 中的 ProjectResource class。
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 字段是前端项目 table 列表的列。
我的问题是当我想在 angularjs 应用程序中使用排序时,我使用前端字段名称,当我想过滤时也是如此,所以当控制器接收到它不知道的 Page 属性时排序的字段。
我的问题是:您有什么建议可以帮助我使用排序吗?
要真正符合 HATEOAS,服务 (spring) 需要向客户端提供所有超媒体控件 (links) 以执行排序。客户端永远不应该按某些数据字段排序......它应该只按服务器提供给客户端的排序选项进行排序。这种排序本身可能是结果的所有数据字段,但这只是您的用例的机会。
这样服务就可以在每个 link 中嵌入排序规则。排序规则可以包含后端列名称。排序 url 本身对客户端是不透明的。
我知道这不会给你一个直接的答案,但你应该能够使用 link 构建器来创建适当的排序 link 和 return 那些。
我正在开发一个应用程序,前端部分使用 AngularJS,后端部分使用 Spring。
我主要有两个实体 classes :
@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 class 映射到 ProjectAssembler 中的 ProjectResource class。
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 字段是前端项目 table 列表的列。
我的问题是当我想在 angularjs 应用程序中使用排序时,我使用前端字段名称,当我想过滤时也是如此,所以当控制器接收到它不知道的 Page 属性时排序的字段。
我的问题是:您有什么建议可以帮助我使用排序吗?
要真正符合 HATEOAS,服务 (spring) 需要向客户端提供所有超媒体控件 (links) 以执行排序。客户端永远不应该按某些数据字段排序......它应该只按服务器提供给客户端的排序选项进行排序。这种排序本身可能是结果的所有数据字段,但这只是您的用例的机会。
这样服务就可以在每个 link 中嵌入排序规则。排序规则可以包含后端列名称。排序 url 本身对客户端是不透明的。
我知道这不会给你一个直接的答案,但你应该能够使用 link 构建器来创建适当的排序 link 和 return 那些。