搭建最基本的spring boot项目,版本是2.0.4.RELEASE。
整合mybatis, 从数据库中查询数据。
我想 通过浏览器,直接访问controller,看到json格式的数据;
但是,控制台中能看到查询的数据,接下来就报错。
Controller
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/findAll")
@ResponseBody
public List<User> findAll(){
List<User> list = userService.findAll();
System.out.println(Arrays.toString(list.toArray()));
return userService.findAll();
}
}
访问 http://localhost:1111/findAll
控制台先显示查询出来的数据,然后报错;
[User{id='122221', status='1', roleId='03bd3cc782b242bbab08c464ac35b0fa',
remark='监控大盘', UpdateTime=2018-08-16 15:10:27.0}, User{id='12222221', status='1', roleId='03bd3cc782b242bbab08c464ac35b0fa', remark='监控大盘', UpdateTime=2018-08-16 15:10:27.0}, User{id='yyx', status='1', roleId='yyx0101', remark='监控大盘', UpdateTime=2018-08-16 15:10:27.0}]
2018-08-21 17:03:55.089 INFO 17728 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 410ms
2018-08-21 17:03:55.132 ERROR 17728 --- [nio-1111-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector] with root cause
java.lang.ClassNotFoundException: com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector
按照之前的想法,加上了@ResponseBody 注解后,方法返回的数据应该被springboot内置的jackson,转换成了json格式的数据, 然后浏览器端直接显示的。
不知道问题出在哪里?
试下去掉@ResponseBody,然后把@Controller换成@RestController
浏览器查看一下,数据是否返回页面了。
1.如果返回了,说明是页面数据接收错误。
2.如果页面没有返回,说明你后台的错误,找不到类,可以添加一下依赖
@RestController 是将请求换成json格式输出,你应该是哪里的配置不对,可以看看我的这边文章:https://somta.com.cn/#/blog/view/ef507e4e6e28434d9787ec715d406491 ,我也是用spring boo 2.0 整合mybatis的,有详细的过程和代码
重点是java.lang.ClassNotFoundException: com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector,转json返回前台报错,pom.xml里面配置的架包不对,可以试试下面的添加配置
com.fasterxml.jackson.core
jackson-databind
2.4.0
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.4.0</version>
</dependency>
楼主试一下@RequestMapping这个注解看看可以不。把@GetMapping换掉。
pom配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spring-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 配置c3p0连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- eureka 注册中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- springcloud -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring boot 版本换成 1.5.x 的,
org.springframework.boot
spring-boot-starter-parent
1.5.7.RELEASE
org.springframework.boot
spring-boot-starter-parent
1.5.7.RELEASE
<!-- lookup parent from repository -->
可能是你UpdateTime 这个时间格式 引起的
spring boot 默认支持一种时间格式 而你的时间格式不是默认格式导致报错
而你打印出来的时间格式 又不是java的格式 类似这种 'Wed Jul 06 10:17:48 CST 2016'
说明你格式化的啦 UpdateTime 这个属性是不是加啦 注解 格式化啦
如果你要格式化时间 不用再注解属性格式化 可以在配置文件直接加
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
ps: 加啦这个配置以后 前端提交的时候 也要这种时间格式提交数据不是会报错
确定了是方法返回数据后转换为json格式时出现问题;我在配置中改了一下,把eureka那段依赖注释掉后就正常访问了。。。问题解决了一半,但是接下来没办法用eureka了;