加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

rest统一返回格式

(2022-03-23 11:11:01)
标签:

spring

boot

rest

统一

返回

分类: java
1. response
import lombok.Data;

@Data
public class Response<T> {
    private Integer status;
    private T data;

    private Response(Integer status, T data) {
        this.status = status;
        this.data = data;
    }

    public static <T> Response<T> createResponse(Integer status, T data) {
        return new Response<>(status, data);
    }
}


2.config

import java.util.HashMap;
import java.util.List;

import com.sunginfo.assets.model.Response;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

@Configuration
public class GlobalReturnConfig {

    @RestControllerAdvice
    static class ResultResponseAdvice implements ResponseBodyAdvice<Object> {

        @Override
        public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
            return true;
        }

        @Override
        public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
                ServerHttpResponse response) {
            if (body instanceof HashMap) {
                HashMap<?, ?> map = (HashMap<?, ?>) body;
                return Response.createResponse((int) map.get("status"),
                        String.format("%s %s", map.get("error"), map.get("path")));
            }
            return Response.createResponse(200, body);
        }
    }

    @Configuration
    public class WebConfig extends WebMvcConfigurationSupport {

        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

            super.configureMessageConverters(converters);
            converters.add(0, new MappingJackson2HttpMessageConverter());
        }
    }
}

3.controller
@CrossOrigin("*")
@RestController
public class AccountController {
    @GetMapping("/api/v1/accounts")
    public List<Account> getAllAccounts() {
        return accountRepository.findAll();
    }

    @GetMapping("/api/v1/accounts/test1")
    public ResponseEntity<String> getTest1() {
        return ResponseEntity.ok("account");
    }

    @GetMapping("/api/v1/accounts/test2")
    public ResponseEntity<Integer> getTest2() {
        return ResponseEntity.ok(2);
    }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有