Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/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
Spring boot Spring云函数(GCP适配器)抛出Hibernate lazy无法初始化代理-无会话_Spring Boot_Hibernate_Jackson_Gson_Spring Cloud Function - Fatal编程技术网

Spring boot Spring云函数(GCP适配器)抛出Hibernate lazy无法初始化代理-无会话

Spring boot Spring云函数(GCP适配器)抛出Hibernate lazy无法初始化代理-无会话,spring-boot,hibernate,jackson,gson,spring-cloud-function,Spring Boot,Hibernate,Jackson,Gson,Spring Cloud Function,这是Spring中的一个常见错误,当尝试使用一些hibernate代理自动转换实体对象时,但我不知道如何在Spring cloud functions gcp adapter中加载Jackson数据类型Hibernate5模块 at com.google.gson.Gson.toJson(Gson.java:638) at com.google.gson.Gson.toJson(Gson.java:618) at org.springframewo

这是Spring中的一个常见错误,当尝试使用一些hibernate代理自动转换实体对象时,但我不知道如何在Spring cloud functions gcp adapter中加载Jackson数据类型Hibernate5模块

        at com.google.gson.Gson.toJson(Gson.java:638)
        at com.google.gson.Gson.toJson(Gson.java:618)
        at org.springframework.cloud.function.json.GsonMapper.toJson(GsonMapper.java:70)
@springboot应用程序
@Log4j2
公共类应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(Application.class,args);
}
@豆子
公共WebMVCConfiguer corscoonfiguer(){
log.info(“configurando cors”);
返回新的WebMVCConfiguer(){
@凌驾
公共作废添加公司标志(公司注册处){
registry.addMapping(“/**”)。AllowedOriginates(“*”);
}
};
}
@豆子
公共模块datatypeHibernateModule(){
log.info(“Cargando modulo hibernate-jackson”);
返回新模块();
}
}
如果我使用与普通Spring boot项目相同的代码,则模块可以工作,但在这种情况下,我在日志中发现适配器没有使用Jackson,它们实现了Gson

        at com.google.gson.Gson.toJson(Gson.java:638)
        at com.google.gson.Gson.toJson(Gson.java:618)
        at org.springframework.cloud.function.json.GsonMapper.toJson(GsonMapper.java:70)

我的第一个解决方法是将页面对象更改为字符串并手动使用jackson mapper

公共类ObtenerEstados实现函数{
@自动连线
私人房地产服务房地产服务;
@鬼鬼祟祟
@凌驾
公共字符串应用(无效未使用){
Page Page=estadoService.buscarTodos(0,33);
ObjectMapper ObjectMapper=新的ObjectMapper();
registerModule(新的Hibernate5Module());
字符串objectAsString=objectMapper.writeValueAsString(第页);
返回objectAsString;
}
}
我在Github存储库上创建了两个分支

如果您已经安装了Docker和Docker Compose,那么可以很容易地复制错误

请执行以下步骤:

git克隆https://github.com/ripper2hl/sepomex.git
cd sepomex
git签出-b开发源/函数
docker compose pull db
docker compose up-d数据库
导出弹簧配置文件\u活动=本地
mvn-Pgcp功能:运行
并使用curl或任何REST客户机执行

curlhttp://localhost:8080/

我知道使用DTO对象的替代方法,但是我不喜欢使用这个选项,所以只要Gson在类路径上,它就被给予优先权,当然谷歌就是这样。请将
spring.http.converters.preferredJSON mapper=jackson
属性设置为force jackson。

最后我修复了这段代码

@springboot应用程序
公共类应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(Application.class,args);
}
@豆子
公共JsonMessageConverter JsonMessageConverter(){
ObjectMapper ObjectMapper=新的ObjectMapper();
registerModule(新的Hibernate5Module());
JacksonMapper JacksonMapper=新的JacksonMapper(objectMapper);
返回新的JsonMessageConverter(jacksonMapper);
}
}
文档解释Gson是默认的MessageConverter,但是如何将Gson(更容易)更改为jackson还不清楚


这不起作用。你能提供一个完整的堆栈跟踪吗?事实上,我看到GCP的人在启用Jackson方面有一个悬而未决的问题。我会联系他们的我正在修理它!哇,非常酷,感谢您的修复,如果您仍然需要完整的stacktrace,这是上面的链接,这是一个很好的解决方法,但在任何情况下,都是固定和后端口的,将在下一版本中提供。