spring boot框架搭建-4 自定义返回值

在前后端交互过程中,就是数据的交互,我们需要对一些数据进行格式化处理,这时候就需要统一自定义返回值,下面就是自定义返回值的定义
第一步,我们定义一个响应码

package com.example.wx.common.core.ret;

/**
 * @Description: 响应码,参考HTTP状态码的语义
 * Created by w on 2019/2/28.
 */
public class RetCode {
    // 成功
    public static final int SUCCESS=200;
    // 失败
    public static final int FAIL=400;
    // 未认证(签名错误)
    public static final int  UNAUTHORIZED=401;
    // 接口不存在
    public static final int NOT_FOUND=404;
    // 服务器内部错误
    public static final int INTERNAL_SERVER_ERROR=500;
}

第二步,自定义返回值

package com.example.wx.common.core.ret;

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.annotation.JSONType;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 *  @Description: 返回对象实体
 * Created by w on 2019/2/28.
 */
@Data
@NoArgsConstructor
@JSONType(serialzeFeatures={SerializerFeature.NotWriteDefaultValue, SerializerFeature.WriteMapNullValue})
public class ApiResult<T> {
    //默认状态码200
    @JSONField(ordinal = 1)
    private int code = RetCode.SUCCESS;
    //默认返回信息
    @JSONField(ordinal = 2)
    private String msg = "请求成功";
    @JSONField(ordinal = 3)
    private T data;

    public ApiResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public ApiResult( String msg) {
        this.msg = msg;
    }
}


第三步,处理返回值空问题,作非空处理及乱码处理

package com.example.wx.common.config;

import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.example.wx.common.core.ret.ApiResult;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by w on 2019/3/1.
 */
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //创建fastJson消息转换器
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

        //升级最新版本需加=============================================================
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XML);
        supportedMediaTypes.add(MediaType.IMAGE_GIF);
        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
        supportedMediaTypes.add(MediaType.IMAGE_PNG);
        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(MediaType.TEXT_XML);
        fastConverter.setSupportedMediaTypes(supportedMediaTypes);

        //创建配置类
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializeFilters(new NullValuePropertyFilter());
        //修改配置返回内容的过滤
        //WriteNullListAsEmpty  :List字段如果为null,输出为[],而非null
        //WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
        //DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
        //WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
        //WriteMapNullValue:是否输出值为null的字段,默认为false
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.DisableCircularReferenceDetect,
                SerializerFeature.WriteMapNullValue
        );
        fastConverter.setFastJsonConfig(fastJsonConfig);
        //将fastjson添加到视图消息转换器列表内
        converters.add(fastConverter);
    }

    //fastjson过滤指定对象中空的字段值
    public class NullValuePropertyFilter implements PropertyFilter {
        @Override
        public boolean apply(Object object, String name, Object value) {
            if (object instanceof ApiResult) {
                return value == null ? false : true;
            }
            return true;
        }
    }
}

最后测试一下是否成功

package com.example.wx.controller;

import com.example.wx.common.core.exception.MyException;
import com.example.wx.common.core.ret.ApiResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by w on 2019/2/28.
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/demo")
    ApiResult demo(@RequestParam String name)
    {
        ApiResult apiResult = new ApiResult();
        apiResult.setData(name);
        return apiResult;
    }
}

接口访问结果
在这里插入图片描述
注:这里的host 指 http://localhost:9001/wx 请将右上角的环境配置一下,以后就不用一直配置了,如下:
在这里插入图片描述
上一篇,spring boot框架搭建-3 springboot 热部署
下一篇,spring boot框架搭建-5 自定义异常以及全局异常捕捉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值