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

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

  •  
  •   shazh520 · 201 天前 · 1387 次点击
    这是一个创建于 201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    接口代码:

    	@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   201 天前 via Android
    我刚写了个 demo,fastjson 默认是可以的,jackson 默认的确实不行,你把 jackson 换成 fastjson 就行了。
    limuyan44
        2
    limuyan44   201 天前 via Android
    实际开发中,大部分接口会类似{ code:,data:}这种格式,而不是直接返回数据。
    warcraft1236
        3
    warcraft1236   201 天前
    {
    "code": "",
    "data": "",
    "message":"",
    "extra":""
    }

    一般都返回这种格式的吧,数据都是塞到 data 下边
    AlbertChen
        4
    AlbertChen   201 天前
    有方法,但是不建议这样搞


    @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   201 天前 via Android
    像 2 楼说的,封装结果类
    jamesxu
        6
    jamesxu   201 天前 via iPhone
    最简单的就是 orElse(new User())
    jamesxu
        7
    jamesxu   201 天前 via iPhone
    没看清楚,可以忽略
    itning
        8
    itning   201 天前
    @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   201 天前 via Android
    Result<T>封装对象返回
    johnniang
        10
    johnniang   201 天前 via Android
    不应该直接返回 404 status 么🌚
    allanzhuo
        11
    allanzhuo   201 天前 via Android
    楼上说的对,一般都是封装结果类
    maowu
        12
    maowu   201 天前 via Android
    ResponseEntity.notFount().build()
    Takamine
        13
    Takamine   200 天前
    统一封装对象+1,data 用个泛型加上业务返回码和信息就行。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2477 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 14:19 · PVG 22:19 · LAX 06:19 · JFK 09:19
    ♥ Do have faith in what you're doing.