springboot遇到的问题

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-detailsspring.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。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值