shazh520
V2EX  ›  问与答

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

  •  
  •   shazh520 · Jul 3, 2019 · 4074 views
    This topic created in 2690 days ago, the information mentioned may be changed or developed.

    接口代码:

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

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

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

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

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

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


    @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
    tudouxiong
    Jul 3, 2019 via Android
    5
    像 2 楼说的,封装结果类
    jwk345
    jwk345
    Jul 3, 2019 via iPhone
    6
    最简单的就是 orElse(new User())
    jwk345
    jwk345
    Jul 3, 2019 via iPhone
    7
    没看清楚,可以忽略
    stimulate1797
    stimulate1797
    Jul 3, 2019
    8
    @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("{}");
    }
    }
    itechify
    itechify
    Jul 3, 2019 via Android
    9
    Result<T>封装对象返回
    johnniang
    johnniang
    Jul 3, 2019 via Android
    10
    不应该直接返回 404 status 么🌚
    allanzhuo
    allanzhuo
    Jul 3, 2019 via Android
    11
    楼上说的对,一般都是封装结果类
    maowu
    maowu
    Jul 3, 2019 via Android
    12
    ResponseEntity.notFount().build()
    Takamine
    Takamine
    Jul 3, 2019
    13
    统一封装对象+1,data 用个泛型加上业务返回码和信息就行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1323 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 17:29 · PVG 01:29 · LAX 09:29 · JFK 12:29
    ♥ Do have faith in what you're doing.