Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于列出转换问题的MapStruct页_Java_Spring Boot_Dto_Mapstruct - Fatal编程技术网

Java 用于列出转换问题的MapStruct页

Java 用于列出转换问题的MapStruct页,java,spring-boot,dto,mapstruct,Java,Spring Boot,Dto,Mapstruct,我不熟悉Spring和MapStruct。我在从页面转换到列表时遇到问题。我在服务中使用了MapStruct映射器。我需要从DB获取所有产品,然后使用MapStruct mapper转换为ProductResponse,然后返回PagedResponse对象,但出现以下错误: java.lang.ClassCastException: org.springframework.data.domain.PageImpl cannot be cast to java.util.List at

我不熟悉Spring和MapStruct。我在从页面转换到列表时遇到问题。我在服务中使用了MapStruct映射器。我需要从DB获取所有产品,然后使用MapStruct mapper转换为
ProductResponse
,然后返回
PagedResponse
对象,但出现以下错误:

java.lang.ClassCastException: org.springframework.data.domain.PageImpl cannot be cast to java.util.List
    at org.walana.GP.service.ProductService.getAll(ProductService.java:67) ~[classes/:na]
    at org.walana.GP.controller.ProductController.getAll(ProductController.java:40)
ReplaceNumber

@Entity
@Table(name = "replace_numbers")
public class ReplaceNumber extends UserDateAudit
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Size(max = 20)
    private String partNumber;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "product_id", nullable = false)
    private Product product;

    public ReplaceNumber() {}

    public ReplaceNumber(String partNumber)
    {
        this.partNumber = partNumber;
    }
}
@Mapper(componentModel = "spring")
public interface ProductMapper
{
    ProductResponse toProductResponse(Product product);
    List<ProductResponse> toProductResponses(List<Product> products);
    Product toProduct(ProductResponse productResponse);
}
@RestController
@RequestMapping("/api/products")
public class ProductController
{
    @Autowired
    private ProductService productService;

    private static final Logger logger = LoggerFactory.getLogger(ProductController.class);

    @GetMapping
    public PagedResponse<ProductResponse> getAll(@CurrentUser UserPrincipal currentUser,
                                                 @RequestParam(value = "page", defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) int page,
                                                 @RequestParam(value = "size", defaultValue = AppConstants.DEFAULT_PAGE_SIZE) int size)
    {
        return productService.getAll(currentUser, page, size);
    }
}
ReplaceNumberResponse

public class ReplaceNumberResponse
{
    private Long id;
    private String partNumber;
}
public class ProductResponse
{
    private Long id;
    private String partNumber;
    private String description;
    private List<ReplaceNumberResponse> replaceNumberResponses;
    private ProductManufacturerResponse manufacturer;
    private ProductModelResponse model;
    private ProductCategoryResponse category;
    private float cost;
    private float price;
}
public class PagedResponse<T>
{
    private List<T> content;
    private int page;
    private int size;
    private long totalElements;
    private int totalPages;
    private boolean last;

    public PagedResponse() {

    }

    public PagedResponse(List<T> content, int page, int size, long totalElements, int totalPages, boolean last) {
        this.content = content;
        this.page = page;
        this.size = size;
        this.totalElements = totalElements;
        this.totalPages = totalPages;
        this.last = last;
    }
}
@Service
public class ProductService
{
    @Autowired
    ProductRepository productRepository;

    @Autowired
    ProductMapper productMapper;

    public PagedResponse<ProductResponse> getAll(UserPrincipal currentUser, int page, int size)
    {

        Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "createdAt");
        Page<Product> products = productRepository.findAll(pageable);

        if (products.getNumberOfElements() == 0)
        {
            return new PagedResponse<>(Collections.emptyList(), products.getNumber(),
                    products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
        }

        List<ProductResponse> productResponses = productMapper.toProductResponses((List<Product>) products);

        return new PagedResponse<>(productResponses, products.getNumber(),
                products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
    }

}
产品

@Entity
@Table(name = "products", indexes = {@Index(name= "part_number_index", columnList = "part_number", unique = true)})
public class Product extends UserDateAudit
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Column(name = "part_number", nullable = false)
    @Size(max = 20)
    private String partNumber;

    @NotBlank
    @Size(max = 255)
    private String description;

    @OneToMany(
            mappedBy = "product",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
    @Fetch(FetchMode.SELECT)
    private List<ReplaceNumber> replaceNumbers = new ArrayList<>();

    @ManyToOne
    @JoinColumn(name = "product_manufacturer_id", referencedColumnName = "id")
    private ProductManufacturer manufacturer;

    @ManyToOne
    @JoinColumn(name = "product_model_id", referencedColumnName = "id")
    private ProductModel model;

    @ManyToOne
    @JoinColumn(name = "product_category_id", referencedColumnName = "id")
    private ProductCategory category;

    @Column(name = "cost", nullable = false)
    @DecimalMin(message = "Cost should be greater than 1", value = "1")
    private float cost;

    @Column(name = "price", nullable = false)
    @DecimalMin(message = "Price should be greater than 0", value = "0")
    private float price;
}
@实体
@表(name=“products”,Index={@Index(name=“part\u number\u Index”,columnList=“part\u number”,unique=true)})
公共类产品扩展了UserDateAudit
{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@不空白
@列(name=“part\u number”,null=false)
@尺寸(最大值=20)
私有字符串部件号;
@不空白
@尺寸(最大值=255)
私有字符串描述;
@独身癖(
mappedBy=“产品”,
cascade=CascadeType.ALL,
fetch=FetchType.EAGER,
孤立删除=真
)
@Fetch(FetchMode.SELECT)
private List replaceNumber=new ArrayList();
@许多酮
@JoinColumn(name=“产品\制造商\标识”,referencedColumnName=“标识”)
私人产品制造商;
@许多酮
@JoinColumn(name=“product\u model\u id”,referencedColumnName=“id”)
私人产品模型;
@许多酮
@JoinColumn(name=“product\u category\u id”,referencedColumnName=“id”)
私人产品类别;
@列(name=“cost”,nullable=false)
@小数点(message=“成本应大于1”,value=“1”)
私人浮动成本;
@列(name=“price”,nullable=false)
@小数点(message=“价格应大于0”,value=“0”)
私人浮动价格;
}
ProductResponse

public class ReplaceNumberResponse
{
    private Long id;
    private String partNumber;
}
public class ProductResponse
{
    private Long id;
    private String partNumber;
    private String description;
    private List<ReplaceNumberResponse> replaceNumberResponses;
    private ProductManufacturerResponse manufacturer;
    private ProductModelResponse model;
    private ProductCategoryResponse category;
    private float cost;
    private float price;
}
public class PagedResponse<T>
{
    private List<T> content;
    private int page;
    private int size;
    private long totalElements;
    private int totalPages;
    private boolean last;

    public PagedResponse() {

    }

    public PagedResponse(List<T> content, int page, int size, long totalElements, int totalPages, boolean last) {
        this.content = content;
        this.page = page;
        this.size = size;
        this.totalElements = totalElements;
        this.totalPages = totalPages;
        this.last = last;
    }
}
@Service
public class ProductService
{
    @Autowired
    ProductRepository productRepository;

    @Autowired
    ProductMapper productMapper;

    public PagedResponse<ProductResponse> getAll(UserPrincipal currentUser, int page, int size)
    {

        Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "createdAt");
        Page<Product> products = productRepository.findAll(pageable);

        if (products.getNumberOfElements() == 0)
        {
            return new PagedResponse<>(Collections.emptyList(), products.getNumber(),
                    products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
        }

        List<ProductResponse> productResponses = productMapper.toProductResponses((List<Product>) products);

        return new PagedResponse<>(productResponses, products.getNumber(),
                products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
    }

}
公共类ProductResponse
{
私人长id;
私有字符串部件号;
私有字符串描述;
私有列表替换编号响应;
私人产品制造商或响应制造商;
私有产品模型响应模型;
私人产品类别响应类别;
私人浮动成本;
私人浮动价格;
}
ProductMapper

@Entity
@Table(name = "replace_numbers")
public class ReplaceNumber extends UserDateAudit
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Size(max = 20)
    private String partNumber;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "product_id", nullable = false)
    private Product product;

    public ReplaceNumber() {}

    public ReplaceNumber(String partNumber)
    {
        this.partNumber = partNumber;
    }
}
@Mapper(componentModel = "spring")
public interface ProductMapper
{
    ProductResponse toProductResponse(Product product);
    List<ProductResponse> toProductResponses(List<Product> products);
    Product toProduct(ProductResponse productResponse);
}
@RestController
@RequestMapping("/api/products")
public class ProductController
{
    @Autowired
    private ProductService productService;

    private static final Logger logger = LoggerFactory.getLogger(ProductController.class);

    @GetMapping
    public PagedResponse<ProductResponse> getAll(@CurrentUser UserPrincipal currentUser,
                                                 @RequestParam(value = "page", defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) int page,
                                                 @RequestParam(value = "size", defaultValue = AppConstants.DEFAULT_PAGE_SIZE) int size)
    {
        return productService.getAll(currentUser, page, size);
    }
}
@Mapper(componentModel=“spring”)
公共接口ProductMapper
{
ProductResponse到ProductResponse(产品);
列出TopProductResponses(列出产品);
产品到产品(ProductResponse ProductResponse);
}
页面响应

public class ReplaceNumberResponse
{
    private Long id;
    private String partNumber;
}
public class ProductResponse
{
    private Long id;
    private String partNumber;
    private String description;
    private List<ReplaceNumberResponse> replaceNumberResponses;
    private ProductManufacturerResponse manufacturer;
    private ProductModelResponse model;
    private ProductCategoryResponse category;
    private float cost;
    private float price;
}
public class PagedResponse<T>
{
    private List<T> content;
    private int page;
    private int size;
    private long totalElements;
    private int totalPages;
    private boolean last;

    public PagedResponse() {

    }

    public PagedResponse(List<T> content, int page, int size, long totalElements, int totalPages, boolean last) {
        this.content = content;
        this.page = page;
        this.size = size;
        this.totalElements = totalElements;
        this.totalPages = totalPages;
        this.last = last;
    }
}
@Service
public class ProductService
{
    @Autowired
    ProductRepository productRepository;

    @Autowired
    ProductMapper productMapper;

    public PagedResponse<ProductResponse> getAll(UserPrincipal currentUser, int page, int size)
    {

        Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "createdAt");
        Page<Product> products = productRepository.findAll(pageable);

        if (products.getNumberOfElements() == 0)
        {
            return new PagedResponse<>(Collections.emptyList(), products.getNumber(),
                    products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
        }

        List<ProductResponse> productResponses = productMapper.toProductResponses((List<Product>) products);

        return new PagedResponse<>(productResponses, products.getNumber(),
                products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
    }

}
公共类页面响应
{
私有列表内容;
私人网页;
私有整数大小;
私有长元素;
私人网页;
私有布尔最后;
公共页面响应(){
}
公共页面响应(列表内容、整型页面、整型大小、长型totalElements、整型totalPages、布尔型last){
this.content=内容;
this.page=page;
这个。大小=大小;
this.totalElements=totalElements;
this.totalPages=totalPages;
this.last=last;
}
}
产品服务

public class ReplaceNumberResponse
{
    private Long id;
    private String partNumber;
}
public class ProductResponse
{
    private Long id;
    private String partNumber;
    private String description;
    private List<ReplaceNumberResponse> replaceNumberResponses;
    private ProductManufacturerResponse manufacturer;
    private ProductModelResponse model;
    private ProductCategoryResponse category;
    private float cost;
    private float price;
}
public class PagedResponse<T>
{
    private List<T> content;
    private int page;
    private int size;
    private long totalElements;
    private int totalPages;
    private boolean last;

    public PagedResponse() {

    }

    public PagedResponse(List<T> content, int page, int size, long totalElements, int totalPages, boolean last) {
        this.content = content;
        this.page = page;
        this.size = size;
        this.totalElements = totalElements;
        this.totalPages = totalPages;
        this.last = last;
    }
}
@Service
public class ProductService
{
    @Autowired
    ProductRepository productRepository;

    @Autowired
    ProductMapper productMapper;

    public PagedResponse<ProductResponse> getAll(UserPrincipal currentUser, int page, int size)
    {

        Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "createdAt");
        Page<Product> products = productRepository.findAll(pageable);

        if (products.getNumberOfElements() == 0)
        {
            return new PagedResponse<>(Collections.emptyList(), products.getNumber(),
                    products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
        }

        List<ProductResponse> productResponses = productMapper.toProductResponses((List<Product>) products);

        return new PagedResponse<>(productResponses, products.getNumber(),
                products.getSize(), products.getTotalElements(), products.getTotalPages(), products.isLast());
    }

}
@服务
公共类产品服务
{
@自动连线
产品库产品库;
@自动连线
ProductMapper ProductMapper;
公共页面响应getAll(UserPrincipal currentUser,int page,int size)
{
Pageable Pageable=PageRequest.of(page,size,Sort.Direction.DESC,“createdAt”);
Page products=productRepository.findAll(可分页);
if(products.getNumberOfElements()==0)
{
返回新的PagedResponse(Collections.emptyList()、products.getNumber(),
products.getSize()、products.getTotalElements()、products.getTotalPage()、products.isLast());
}
List productResponses=productMapper.toProductResponses((列表)产品);
返回新的PagedResponse(productResponses,products.getNumber(),
products.getSize()、products.getTotalElements()、products.getTotalPage()、products.isLast());
}
}
ProductController

@Entity
@Table(name = "replace_numbers")
public class ReplaceNumber extends UserDateAudit
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Size(max = 20)
    private String partNumber;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "product_id", nullable = false)
    private Product product;

    public ReplaceNumber() {}

    public ReplaceNumber(String partNumber)
    {
        this.partNumber = partNumber;
    }
}
@Mapper(componentModel = "spring")
public interface ProductMapper
{
    ProductResponse toProductResponse(Product product);
    List<ProductResponse> toProductResponses(List<Product> products);
    Product toProduct(ProductResponse productResponse);
}
@RestController
@RequestMapping("/api/products")
public class ProductController
{
    @Autowired
    private ProductService productService;

    private static final Logger logger = LoggerFactory.getLogger(ProductController.class);

    @GetMapping
    public PagedResponse<ProductResponse> getAll(@CurrentUser UserPrincipal currentUser,
                                                 @RequestParam(value = "page", defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) int page,
                                                 @RequestParam(value = "size", defaultValue = AppConstants.DEFAULT_PAGE_SIZE) int size)
    {
        return productService.getAll(currentUser, page, size);
    }
}
@RestController
@请求映射(“/api/products”)
公共类产品控制器
{
@自动连线
私人产品服务;
私有静态最终记录器Logger=LoggerFactory.getLogger(ProductController.class);
@GetMapping
公共页面响应getAll(@CurrentUser-UserPrincipal-CurrentUser,
@RequestParam(value=“page”,defaultValue=AppConstants.DEFAULT\u page\u NUMBER)int page,
@RequestParam(value=“size”,defaultValue=AppConstants.DEFAULT\u PAGE\u size)int size)
{
return productService.getAll(当前用户、页面、大小);
}
}
更换

productMapper.toProductResponses((List<Product>) products)