如何解决尝试从端点请求响应时模型映射器出现问题
Holla开发人员,我使用Maven在Spring-Boot的基础上开发了这个应用程序,而且我遇到了一个奇怪的错误,从未发生过。每当我从Swagger发出请求时,都会收到响应
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中检查了从模型映射器的导入
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.8</version>
</dependency>
尽管可以正常运行该应用程序,但任何时候我只要调用引用获取数据的任何端点即可 从我的一个实体中发生这种情况。
就像在服务实现中一样,在我的服务上同时引用了模型映射器:
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());
};
}
在寻找解决此问题的方法时,我确实尝试实现了其他开发人员的工作,并且在我的环境变量中设置了系统变量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,mappedBy = "restaurantid")
private List<Board> boards;
@OneToMany(cascade = CascadeType.ALL,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 + ",turns="
+ turns + ",bookings=" + bookings + ",boards=" + boards + "]";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。