如何处理 spring boot 接口返回 null 的情况?

2019-07-03 14:34:52 +08:00
 shazh520

接口代码:

	@GetMapping("/me")
	public User querySelfUserInfo() {

		return userService.querySelfUserInfo()
		                  .orElse(null);
	}

查询用户信息,查不到就直接返回null。我想要返回null的时候前端接收到的是{}。大家伙是怎么做的?

jackson 和 fastjson 我都配置过了,实现不了。

或者是大家在做查询的时候,查不到数据是如何返回的?

2735 次点击
所在节点    问与答
13 条回复
limuyan44
2019-07-03 15:43:31 +08:00
我刚写了个 demo,fastjson 默认是可以的,jackson 默认的确实不行,你把 jackson 换成 fastjson 就行了。
limuyan44
2019-07-03 15:46:08 +08:00
实际开发中,大部分接口会类似{ code:,data:}这种格式,而不是直接返回数据。
warcraft1236
2019-07-03 15:50:32 +08:00
{
"code": "",
"data": "",
"message":"",
"extra":""
}

一般都返回这种格式的吧,数据都是塞到 data 下边
AlbertChen
2019-07-03 17:09:05 +08:00
有方法,但是不建议这样搞


@RestControllerAdvice
public class RespVoAdvice implements ResponseBodyAdvice<Object> {
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {

if (body == null) {
return "{}"
}
return body;
}
}
tudouxiong
2019-07-03 18:41:34 +08:00
像 2 楼说的,封装结果类
jamesxu
2019-07-03 19:25:41 +08:00
最简单的就是 orElse(new User())
jamesxu
2019-07-03 19:26:17 +08:00
没看清楚,可以忽略
itning
2019-07-03 20:14:31 +08:00
@GetMapping(value = "/", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<?> index() {
Optional<User> userOptional = userService.querySelfUserInfo();
if (userOptional.isPresent()) {
return ResponseEntity.ok(userOptional.get());
} else {
return ResponseEntity.ok("{}");
}
}
oneisall8955
2019-07-03 20:22:28 +08:00
Result<T>封装对象返回
johnniang
2019-07-03 20:43:37 +08:00
不应该直接返回 404 status 么🌚
allanzhuo
2019-07-03 21:06:00 +08:00
楼上说的对,一般都是封装结果类
maowu
2019-07-03 21:14:20 +08:00
ResponseEntity.notFount().build()
Takamine
2019-07-03 23:21:24 +08:00
统一封装对象+1,data 用个泛型加上业务返回码和信息就行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/579652

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX