V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shazh520
V2EX  ›  问与答

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

  •  
  •   shazh520 · 2019-07-03 14:34:52 +08:00 · 2315 次点击
    这是一个创建于 879 天前的主题,其中的信息可能已经有所发展或是发生改变。

    接口代码:

    	@GetMapping("/me")
    	public User querySelfUserInfo() {
    
    		return userService.querySelfUserInfo()
    		                  .orElse(null);
    	}
    

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

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

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

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

    一般都返回这种格式的吧,数据都是塞到 data 下边
    AlbertChen
        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;
    }
    }
    tudouxiong
        5
    tudouxiong   2019-07-03 18:41:34 +08:00 via Android
    像 2 楼说的,封装结果类
    jamesxu
        6
    jamesxu   2019-07-03 19:25:41 +08:00 via iPhone
    最简单的就是 orElse(new User())
    jamesxu
        7
    jamesxu   2019-07-03 19:26:17 +08:00 via iPhone
    没看清楚,可以忽略
    itning
        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("{}");
    }
    }
    oneisall8955
        9
    oneisall8955   2019-07-03 20:22:28 +08:00 via Android
    Result<T>封装对象返回
    johnniang
        10
    johnniang   2019-07-03 20:43:37 +08:00 via Android
    不应该直接返回 404 status 么🌚
    allanzhuo
        11
    allanzhuo   2019-07-03 21:06:00 +08:00 via Android
    楼上说的对,一般都是封装结果类
    maowu
        12
    maowu   2019-07-03 21:14:20 +08:00 via Android
    ResponseEntity.notFount().build()
    Takamine
        13
    Takamine   2019-07-03 23:21:24 +08:00
    统一封装对象+1,data 用个泛型加上业务返回码和信息就行。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1255 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:47 · PVG 01:47 · LAX 09:47 · JFK 12:47
    ♥ Do have faith in what you're doing.