SPringBoot项目@RestController返回值为空排查过程

874 阅读2分钟

今天在整理项目,用apifox测试接口返回值时候一直是

[    {}]

没注意[]里有{},数据库里有一条数据,怎么没有查询出来,于是想办法把sql打印出来,于是添加logback.文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds" debug="true">

	<!-- 日志文件存储路径 -->
	<property name="LOG_HOME" value="${LOGGER_ROOT_PATH}/logs/${PROJECT_NAME}"></property>

	<!-- 控制台输出 -->
	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%d{HH:mm:ss.SSS} %-5level %logger [%method - %line] - %msg%n
			</pattern>

		</encoder>
	</appender>

	<!-- 按天生成日志文件 -->
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy
			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- 日志文件输出文件名 -->
			<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}-log.%d{yyyy-MM-dd}-%i
			</FileNamePattern>

			<!--日志文件保留天数 -->
			<MaxHistory>30</MaxHistory>

			<!-- 设置每个文件大小 -->
			<maxFileSize>512MB</maxFileSize>


		</rollingPolicy>

		<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
		<encoder>

			<pattern>%d{HH:mm:ss.SSS} %-5level %logger [%method - %line] - %msg%n
			</pattern>

		</encoder>


	</appender>

	<!-- 日志输出级别 -->
	<root name="com" level="INFO">
		<appender-ref ref="FILE" />
	</root>
	<!-- 日志输出级别 -->
	<root name="com" level="INFO">
		<appender-ref ref="CONSOLE" />
	</root>
</configuration>

application.yml文件添加配置

logging:
  level:
    com.example.*: debug

一个开始是info级别,日志也不打印,改成debug级别就打印了

那查询出来是有值为啥不展示,于是把返回值分别返回字符串,对象,集合,发现字符串是正常返回的,我们知道springboot添加了@RestController返回值自动序列化成json格式,不需要在自定义。我之前用过@JsonProperty来指定输出属性标签名称,于是我把UserPo对象中随机几个字段加上@JsonProperty,结果加了该字段的都能显示,还是很奇怪啊,正产都是驼峰命名,代码里很少使用@JsonProperty,项目都运行好好地啊,猜想是不是没有get方法,但是是有@Data注解的,我先手动给属性加上get方法,结果都正常展示了

@RestController
public class UserController {

    @Resource
    private UserService userService;

    @GetMapping("/uaa/queryUser")
    public List<UserPo> queryUser() {
        List<UserPo> list =  userService.queryUser();
        return list;
    }

}

那说明@Data没生效,排场是引入lombok的

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

上网查资料,安装lombok插件

[
    {
        "id": 2,
        "relationId": "顶顶",
        "postId": 22,
        "userName": "2",
        "nickName": "33",
        "type": false,
        "email": "12",
        "phone": "3",
        "sex": "0",
        "avatar": "3",
        "password": "3",
        "status": "0",
        "channel": 0,
        "loginIp": "2",
        "loginDate": "2024-07-03T15:56:25",
        "loginDevice": "威威",
        "isAdmin": false,
        "creatorId": 333,
        "creatorName": "33",
        "createTime": "2024-07-03T20:04:59",
        "updaterId": 33,
        "updaterName": "33",
        "updateTime": "2024-07-03T20:04:59",
        "remark": " 烦烦烦",
        "isDeleted": 0,
        "source": 1
    }
]

至此问题都解决