我使用的是Spring数据JPA。
我的控制器如下所示
@RequestMapping(value = "/pages/{pageNumber}", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Page<User>> paginatedUser(@PathVariable final Integer pageNumber)
{
final PageRequest request = new PageRequest(pageNumber - 1, DEFAULt_PAGE_SIZE, Sort.Direction.DESC, "startTime");
return new ResponseEntity<>(userRepository.findAll(request), HttpStatus.OK);
}
现在我决定发送一个PageDTO对象来代替Page对象,以限制发送内容。有什么办法可以用java 8把页面转换成页面?
我看到Page是从Iterable
派生而来的,所以我想我可以做一些类似的事情,但不知道如何将它与PageDTO和UserDTO结合起来。
StreamSupport.stream(userRepository.findAll(request).spliterator(),false)
有没有有效的java 8方法来做到这一点。
我想出了这个解决方案
@RequestMapping(value = "/pages/{pageNumber}", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<PageDTO> paginatedUser(@PathVariable final Integer pageNumber)
{
final PageRequest request = new PageRequest(pageNumber - 1, DEFAULt_PAGE_SIZE, Sort.Direction.DESC, "startTime");
final Page<User> page = userRepository.findAll(request);
return new ResponseEntity<>(new PageDTO(page, StreamSupport.stream(page.getContent().spliterator(), true).map(UserDTO::new)
.collect(Collectors.toList())), HttpStatus.OK);
}
public class PageDTO {
private int beginIndex;
private int currentIndex;
private int endIndex;
private List<?> entities;
public PageDTO(final Page<?> page, final List<?> entities) {
this.entities = entities;
this.currentIndex = page.getNumber() + 1;
this.beginIndex = Math.max(1, currentIndex - 5);
this.endIndex = Math.min(beginIndex + 10, page.getTotalPages());
}
我想知道是否有另一种有效的方法来做到这一点?
这是一个太迟的答案,但这个解决方案对我来说很有效
服务
public Page<EntityDto> getAllEntities(Pageable pageable) {
return entityRepository.findAll(pageable).map(entityMapper::toEntityDto);
}
映射
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface EntityMapper {
EntityDto toEntityDto(Entity entity);
}
控制器
@GetMapping(path = "/entities")
public List<EntityDto> getAllEntities(Pageable pageable) {
Page<EntityDto> page = entityService.getAllEntities(pageable);
return page.getContent();
}
这将从第一页返回大小 = 10 的实体列表
http://localhost:port/api/entities?page=0&size=10
感谢JHipster!
我知道这是一个老问题,但我遇到了同样的问题,我想为任何感兴趣的人提供一个可能的解决方案。以下是我找到的对我的代码有帮助的内容:https://github . com/pkainulainen/spring-data-JPA-examples/blob/master/query-methods/src/main/Java/net/petrikainulainen/spring data/JPA/todo/todo mapper . Java
我还使用了Jpa存储库对数据进行分页,以便DTO页面将具有相同的参数(页码,大小等)。这是我的存储库:
@Repository
public interface Repository extends JpaRepository<Entity, Integer> {
/**
* Name the method according to what query you need to execute
* e.g. findAll --> return all the rows that satisfy the following conditions,
* ByUsername --> username is a field in entity class,
* @param pageable: pagination is applied on the data.
* @return
*/
public Page<Entity> findAllByUsername(String username, Pageable pageable);
}
这是我进行映射的方法:
public Page<EntityDTO> findByUsername(String username, Pageable pageable){
Page<Entity> entityPage = entityRepository.findAllByUsername(username, pageable);
List<EntityDTO> dtos = mapper.entityToEntityDTOs(entityPage.getContent());
return new PageImpl<>(dtos, pageable, entityPage.getTotalElements());
}
我的Mapstruct mapper:
import org.mapstruct.factory.Mappers;
/**
* Mapper for converting entity to DTO.
*/
@Mapper(componentModel = "spring", uses = {})
public interface Mapper {
/**
* The interface declares a member INSTANCE, providing clients access to the mapper implementation,
* which is the file target\generated-sources\com\company\springapp\dto\mappers\MapperImpl.java
* (automatically generated when compiling the project).
*/
AuditMapper INSTANCE = Mappers.getMapper( Mapper.class );
/**
* Convert entity to DTO.
* Mappings are used to 'bind' entity fields to DTO fields (for the mapper's implementation).
* @param entity
* @return
*/
@Mappings({
@Mapping(source = "id", target = "id"),
@Mapping(source = "username", target = "dtoUsername"),
@Mapping(source = "action", target = "dtoAction")
})
public EntityDTO entityToEntityDTO(Entity entity);
/**
* Convert entities' list to DTOs' list.
* @param entities
* @return
*/
public List<EntityDTO> entitiesToEntityDTOs(List<Entity> entities);
}
问题内容: 我正在尝试将变量发送到进行AJAX调用的同一页面。 仅当我分开PHP脚本时(例如,相应地更改AJAX ),我才能收到成功的结果。 同一页是否可以捕获和处理我们使用AJAX传递的变量? 问题答案: 您在AJAX设置中进行了设置,因此您应该使用json对象而不是String(HTML)。 使用 代替,然后将PHP放在页面的顶部。因此,在检查是否存在HTML之前,不会回显任何HTML 。 另
本文向大家介绍如何使用wkhtml2pdf将html页面转换为pdf,包括了如何使用wkhtml2pdf将html页面转换为pdf的使用技巧和注意事项,需要的朋友参考一下 本文将指导您安装可以将HTML页面或HTML输出转换为PDF格式的工具。如果我们需要将Pdf发送给一组客户或客户,以及发送报告而不是HTML(您可以通过PDF格式通过电子邮件发送)的报告,则此功能还将有助于生成Pdf的代码。为您
问题内容: 有哪些实用程序可获取网页图像? 基本上等同于打开页面后对其进行“截屏”。 问题答案: wkhtmltopdf和wkhtmltoimage是开源(LGPLv3)命令行工具,可使用QT Webkit渲染引擎将HTML渲染为PDF和各种图像格式。
我有两个pdf: 主人。pdf:包含带有书签、大纲(目录)的页面 孩子。pdf:只有一页的文件 child.pdf页需要作为第n页(在我的情况下为第10页)附加到Master.pdf. 生成的PDF应该为新页面添加一个新的大纲项(一个新的书签)。现有的书签应该保持正常工作。实际上:现有的大纲树应该重构。 我可以通过iText应用编程接口实现这一点吗?有任何有用的示例吗?
` 在此输入代码
有没有办法重写本地项目中的URL以使其看起来像网页? 例如,我有一个带有url的项目 我想把这个重写到: 或 该项目有子页面,如果它能像 我试了一个小时,但我真的很无聊。 我和VertrigoServ一起工作,mod_rewrite在其他项目中尝试的一些例子效果很好。