1。报异常:com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 141 path $[0].jumpUrl
There was an unexpected error (type=Internal Server Error, status=500).
com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 141 path $[0].jumpUrl
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 141 path $[0].jumpUrl
at com.google.gson.internal.Streams.parse(Streams.java:60)
at com.google.gson.JsonParser.parse(JsonParser.java:84)
at com.google.gson.JsonParser.parse(JsonParser.java:59)
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at com.example.demo1.http.TaskInfoServiceImpl.getTaskInfo(TaskInfoServiceImpl.java:40)
at com.example.demo1.http.IndexController.getTaskList(IndexController.java:20)
解决方法:
taskInfoList = taskInfoService.getTaskInfo(typeId, userId);
//反序列化成对象
ObjectMapper mapper = new ObjectMapper();
List<TaskInfo> list = mapper.convertValue(taskInfoList, new TypeReference<List<TaskInfo>>() { });
2。 java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
mysql8.x版本的数据库在连接的时候报错java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
只要在url的后边加上allowPublicKeyRetrieval=true即可
在application.properties中修改
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
3。 报错:org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.example.demo1.http.ResultVO] and content type [text/html;charset=utf-8]
修改:
在RestTemplate中添加
RestTemplate client = new RestTemplate();
client.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.util.ArrayList;
import java.util.List;
public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public WxMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
mediaTypes.add(MediaType.TEXT_HTML); //加入text/html类型的支持
setSupportedMediaTypes(mediaTypes);// tag6
}
}
4。在application.properties中添加了spring-boot-devtools依赖,但并没有起作用:
配置了spring-boot-devtools
的应用,会去监控classpath上的文件修改,如果有修改,就会出发应用的重启。
依赖的设置:
<!-- Spring boot 热部署 : 此热部署会遇到 java.lang.ClassCastException 异常 -->
<!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
其根本原因是因为Intellij IEDA和Eclipse不同,Eclipse设置了自动编译之后,修改类它会自动编译,而IDEA在非RUN或DEBUG情况下才会自动编译(前提是你已经设置了Auto-Compile)。
修改:
首先,IDEA设置里面这里必须打勾
然后 Shift+Ctrl+Alt+/,选择Registry,进去之后,找到如下图所示的选项,打勾
注:如果快捷键找不到可以 Help->FindAction ->搜索Registry 第一个就是了
ok了,重启一下项目,然后改一下类里面的内容,IDEA就会自动去make了。
5。DevTools工具的一些属性配置说明
(1) 当进行全量打包(fully packaged)的时候, Developer Tools会自动的被禁用。比如,当你用 java -jar
或者制定了类加载器的时候,则会被当成是 生产应用 (production application)
。生产环境上,通常不允许启用devTools工具,因为这是一个严重的安全问题。如果想启用 Devloper Tools,需要配置 spring.devtools.restart.enabled
系统属性为 true
。
(2) 默认属性(Property Defaults)
默认情况下,devtools是禁用了缓存选项的。
DevTools工具可以支持对Web请求启用DEBUG
级别的日志(可以给出更详尽的日志记录信息,可能包括一些潜在的敏感信息)。设置方法为打开 spring.mvc.log-request-details
或 spring.codec.log-request-details
配置属性。
如果你不想启用默认的属性,你可以在appplication.properties中设置 sprint.devtools.add-properties=false
。
(3) 自动重启(restart)
配置了spring-boot-devtools
的应用,会去监控classpath上的文件修改,如果有修改,就会出发应用的重启。但是有些时候,对于一些静态资源文件(例如,asset和view template)的修改,则并不需要重启应用。
(4) 排除资源文件(Excluding Resources)
一些资源文件,不希望能够自动触发程序的重启。例如,Thymeleaf 模版的编写。默认情况下,更改/ META-INF / maven,/ META-INF / resources,/ resources,/ static,/ public或/ templates中的资源不会触发重新启动,但会触发实时重新加载(live reload)。如果你想自定义 排除一些文件,可以使用 spring.devtools.restart.exclude
属性 。例如,只想排除 /static
和 /public
,你可以如下设置:
spring.devtools.restart.exclude=static/**,public/**
(5) 禁用重启(Disabling Restart)
如果你不想使用restart特性,你可以通过设置 spring.devtools.restart.enabled
属性来禁用它。在大多数情况下,你可以直接在 application.properties
文件中设置(这种设置方法仍然会初始化 restart加载器,但是并不会监控文件的改变)。
如果,你想完完全全的禁用。你的在调用 SpringApplication.run(...)
之前,设置 spring.devtools.restart.enabled
为 false。
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}
(6) 实时加载(LiveReload)
spring-boot-devtools
模块包含了一个嵌入的 LiveReload
服务器,它可以实现当资源文件更改的时候,自动的去触发浏览器刷新。
如果 你想禁用 LiveReload
服务器的启动,可以设置 spring.devtools.livereload.enabled
属性为 false。