接口代码:
@GetMapping("/me")
public User querySelfUserInfo() {
return userService.querySelfUserInfo()
.orElse(null);
}
查询用户信息,查不到就直接返回null
。我想要返回null
的时候前端接收到的是{}
。大家伙是怎么做的?
jackson 和 fastjson 我都配置过了,实现不了。
或者是大家在做查询的时候,查不到数据是如何返回的?
1
limuyan44 2019-07-03 15:43:31 +08:00 via Android
我刚写了个 demo,fastjson 默认是可以的,jackson 默认的确实不行,你把 jackson 换成 fastjson 就行了。
|
2
limuyan44 2019-07-03 15:46:08 +08:00 via Android
实际开发中,大部分接口会类似{ code:,data:}这种格式,而不是直接返回数据。
|
3
warcraft1236 2019-07-03 15:50:32 +08:00
{
"code": "", "data": "", "message":"", "extra":"" } 一般都返回这种格式的吧,数据都是塞到 data 下边 |
4
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; } } |
5
tudouxiong 2019-07-03 18:41:34 +08:00 via Android
像 2 楼说的,封装结果类
|
6
jamesxu 2019-07-03 19:25:41 +08:00 via iPhone
最简单的就是 orElse(new User())
|
7
jamesxu 2019-07-03 19:26:17 +08:00 via iPhone
没看清楚,可以忽略
|
8
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("{}"); } } |
9
oneisall8955 2019-07-03 20:22:28 +08:00 via Android
Result<T>封装对象返回
|
10
johnniang 2019-07-03 20:43:37 +08:00 via Android
不应该直接返回 404 status 么🌚
|
11
allanzhuo 2019-07-03 21:06:00 +08:00 via Android
楼上说的对,一般都是封装结果类
|
12
maowu 2019-07-03 21:14:20 +08:00 via Android
ResponseEntity.notFount().build()
|
13
Takamine 2019-07-03 23:21:24 +08:00
统一封装对象+1,data 用个泛型加上业务返回码和信息就行。
|