java—尝试从端点请求响应时模型Map器出现问题

js4nwp54  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(181)

holla开发者,我在用maven做这个基于SpringBoot的应用程序,我有一个奇怪的错误,从来没有发生过

Converter org.modelmapper.internal.converter.NumberConverter@471e4a3f failed to convert com.apprestaurant.AppRestaurant.entity.Restaurant to java.lang.Long.
Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:

1) Error mapping
 Restaurant [id=1, name=Gourmet African Food, restaurantDescription=The best of African Food, restaurantAddress=Badalona,Latrilla,7,6, restaurantImage=https://tul.imgix.net/content/article/Glamp_Cocktail_Bar-32.jpg,
 bookings=[com.apprestaurant.AppRestaurant.entity.Booking@c576b58], 
boards=[com.apprestaurant.AppRestaurant.entity.Board@90c702d, com.apprestaurant.AppRestaurant.entity.Board@67094136, com.apprestaurant.AppRestaurant.entity.Board@42fcfcbb, com.apprestaurant.AppRestaurant.entity.Board@52511965],
 turns=[com.apprestaurant.AppRestaurant.entity.Turn@187c981e, com.apprestaurant.AppRestaurant.entity.Turn@4bea963c, com.apprestaurant.AppRestaurant.entity.Turn@7ad329e1, com.apprestaurant.AppRestaurant.entity.Turn@7e8e4b8]] to java.lang.Long

我在pom.xml中检查了从模型Map器导入的内容

<dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.3.8</version>
        </dependency>

尽管运行应用程序正常,但每当我调用引用从我的某个实体检索任何数据的任何端点时,都会发生这种情况。
在我的服务实现中提到模型Map器在我的服务上的使用时,我做了如下工作:

FOR THE SERVICE

package com.apprestaurant.AppRestaurant.services;

import java.util.List;

import com.apprestaurant.AppRestaurant.exceptions.AppException;
import com.apprestaurant.AppRestaurant.jsons.RestaurantJson;

public interface RestaurantService {

    List<RestaurantJson>getAllRestaurants()throws AppException;
}

FOR THE SERVICE IMPLEMENTATION
package com.apprestaurant.AppRestaurant.services.implementation;

import java.util.List;
import java.util.stream.Collectors;

import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.apprestaurant.AppRestaurant.entity.Restaurant;
import com.apprestaurant.AppRestaurant.exceptions.AppException;
import com.apprestaurant.AppRestaurant.exceptions.NotFoundException;
import com.apprestaurant.AppRestaurant.jsons.RestaurantJson;
import com.apprestaurant.AppRestaurant.repositories.RestaurantRepository;
import com.apprestaurant.AppRestaurant.services.RestaurantService;

@Service
public class RestaurantServiceImpl implements RestaurantService {

    @Autowired
    RestaurantRepository restaurantRepository;

    public static final ModelMapper modelMapper = new ModelMapper();

    public List<RestaurantJson> getAllRestaurants() throws AppException {
        final List<Restaurant> restaurant = restaurantRepository.findAll();
        return restaurant.stream().map(service -> modelMapper.map(service, RestaurantJson.class))
                .collect(Collectors.toList());
    }

    }

我调用该方法的存储库是

package com.apprestaurant.AppRestaurant.repositories;

import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.apprestaurant.AppRestaurant.entity.Restaurant;

@Repository
public interface RestaurantRepository extends JpaRepository<Restaurant, Long> {
    public List<Restaurant> findAll();
}

然后,建立端点连接的控制器如下所示:

package com.apprestaurant.AppRestaurant.coontrollers;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import com.apprestaurant.AppRestaurant.exceptions.AppException;
import com.apprestaurant.AppRestaurant.jsons.RestaurantJson;
import com.apprestaurant.AppRestaurant.response.BookingRestaurantResponse;
import com.apprestaurant.AppRestaurant.services.RestaurantService;

@RestController
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping(path = "/app-restaurant/version1")
public class RestaurantController {

    @Autowired
    RestaurantService restaurantService;

        @ResponseStatus(HttpStatus.OK)
    @RequestMapping(value = "/restaurant/all", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public BookingRestaurantResponse<List<RestaurantJson>> getAllRestaurantsList() throws AppException {
        return new BookingRestaurantResponse<>("Success", String.valueOf(HttpStatus.OK), "OK",
                restaurantService.getAllRestaurants());
    };
}

在这个问题的fomer解决方案中,我试图实现一些其他开发人员的工作,并在我的环境变量中设置系统变量a

MAVEN_OPTS= -Xmx1024m -XX:MaxPermSize=128m

但最终没有奏效。
你知道为什么会这样吗?
pd:我知道已经在这里扩展了代码公开,但我认为有必要让您也看到我的实体,以及我附加它的json原因如下:

RESTAURANT ENTITY
package com.apprestaurant.AppRestaurant.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "RESTAURANT")

public class Restaurant {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", unique = true, nullable = false)
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "RESTAURANTDESCRIPTION")
    private String restaurantDescription;

    @Column(name = "RESTAURANTADDRESS")
    private String restaurantAddress;

    @Column(name = "RESTAURANTIMAGE")
    private String restaurantImage;

/////////////////////////// relaciones con demas tablas//////////////////////////////////

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "restaurantid")
    private List<Booking> bookings;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "restaurantid")
    private List<Board> boards;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "restaurantid")
    private List<Turn> turns;

/////////////////////////////////getters y setters///////////////////////////////////
    public Long getId() {return id;}
    public void setId(Long id) {this.id = id;}

    public String getRestaurantDescription() {  return restaurantDescription;}
    public void setRestaurantDescription(String restaurantDescription) {this.restaurantDescription = 
    restaurantDescription;}

    public String getRestaurantAddress() {  return restaurantAddress;}
    public void setRestaurantAddress(String restaurantAddress) {this.restaurantAddress =restaurantAddress;}

    public String getRestaurantImage() {return restaurantImage; }
    public void setRestaurantImage(String restaurantImage) {this.restaurantImage = restaurantImage; }

    public List<Booking> getBookings() {return bookings;}
    public void setBookings(List<Booking> bookings) {   this.bookings = bookings;}

    public List<Board> getBoards() {    return boards;}
    public void setBoards(List<Board> boards) { this.boards = boards;}

    public List<Turn> getTurns() {  return turns;}
    public void setTurns(List<Turn> turns) {this.turns = turns;}

    public String getName() {   return name;}
    public void setName(String name) {  this.name = name;}

    @Override
    public String toString() {
        return "Restaurant [id=" + id + ", name=" + name + ", restaurantDescription=" + restaurantDescription
                + ", restaurantAddress=" + restaurantAddress + ", restaurantImage=" + restaurantImage + ", bookings="
                + bookings + ", boards=" + boards + ", turns=" + turns + "]";
    }

}

RESTAURANT JSON
package com.apprestaurant.AppRestaurant.jsons;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class RestaurantJson {

    @JsonProperty("id")
    private Long id;

    @JsonProperty("Name")
    private String name;

    @JsonProperty("restaurantDescription")
    private String restaurantDescription;

    @JsonProperty("restaurantAddress")
    private String restaurantAddress;

    @JsonProperty("restaurantImage")
    private String restaurantImage;

    @JsonProperty("turns")
    private List<TurnJson> turns;

    @JsonProperty("bookings")
    private List<BookingJson> bookings;

    @JsonProperty("tables")
    private List<BoardJson> boards;

    ///////////////////////////// getters y setters/////////////////////////////////////
    public Long getId() {   return id;}
    public void setId(Long id) {this.id = id;}

    public String getRestaurantDescription() {  return restaurantDescription;}
    public void setRestaurantDescription(String restaurantDescription) {this.restaurantDescription = restaurantDescription; }

    public String getRestaurantAddress() {return restaurantAddress;}
    public void setRestaurantAddress(String restaurantAddress) {this.restaurantAddress = restaurantAddress;}

    public String getRestaurantImage() {return restaurantImage;}
    public void setRestaurantImage(String restaurantImage) {this.restaurantImage = restaurantImage; }

    public List<TurnJson> getTurns() {return turns;}
    public void setTurns(List<TurnJson> turns) {this.turns = turns; }

    public List<BookingJson> getBookings() {return bookings;}
    public void setBookings(List<BookingJson> bookings) {this.bookings = bookings;  }

    public List<BoardJson> getBoards() {return boards;  }
    public void setBoards(List<BoardJson> boards) {this.boards = boards;}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}

    @Override
    public String toString() {
        return "RestaurantJson [id=" + id + ", name=" + name + ", restaurantDescription=" + restaurantDescription
                + ", restaurantAddress=" + restaurantAddress + ", restaurantImage=" + restaurantImage + ", turns="
                + turns + ", bookings=" + bookings + ", boards=" + boards + "]";
    }

}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题