Springboot設(shè)置統(tǒng)一的返回格式的方法步驟
在我們應(yīng)用中我們通常與前端交互使用json 格式,設(shè)置統(tǒng)一的返回json 格式是非常必要的,可以減少開發(fā)人員的工作量。
第一個使用統(tǒng)一的消息轉(zhuǎn)換器,這里使用jackson 的相關(guān)功能,引入jar
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
創(chuàng)建一個全局配置類(GlobalConfig)并使用
@Configuration
注解標(biāo)記該類為配置類。然后,在該類上使用@EnableWebMvc
注解開啟對MVC的支持。- 在該配置類中重寫
configureMessageConverters()
方法,將Jackson消息轉(zhuǎn)換器添加到默認的消息轉(zhuǎn)換器列表中。示例如下所示:
@Configuration @EnableWebMvc public class GlobalConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { ObjectMapper objectMapper = new ObjectMapper(); // 設(shè)置日期序列化/反序列化格式 JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE); javaTimeModule.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE); objectMapper.registerModule(javaTimeModule); // 其他自定義配置... Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() .serializationInclusion(JsonInclude.Include.NON_NULL) .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(builder.build()); converters.add(converter); } }
二、聲明統(tǒng)一格式的返回類型,一般包含code、message、data 三部分
1)定義一個返回結(jié)果 IResultStatus
public interface IResultStatus { /** * 業(yè)務(wù)狀態(tài)碼 * @return Integer */ Integer code(); /** * 業(yè)務(wù)信息描述 * @return String */ String message(); }
2)創(chuàng)建一個枚舉實體
public enum ResultStatus implements IResultStatus { /** * 成功 */ SUCCESS(200, "OK"), /** * 錯誤的請求,參數(shù)異常 */ BAD_REQUEST(400, "Bad Request params exception"), /** * 服務(wù)器異常 */ INTERNAL_SERVER_ERROR(500, "Internal Server Error"), /** * 401 未認證異常 */ UNAUTHORIZED(401, "認證異常"), /** * 業(yè)務(wù)異常 */ BUSINESS_ERR(10000, "業(yè)務(wù)異常"); /** * 業(yè)務(wù)狀態(tài)碼 */ private Integer code; /** * 業(yè)務(wù)信息描述 */ private String message; ResultStatus (Integer code, String message) { this.code = code; this.message = message; } /** * 業(yè)務(wù)狀態(tài)碼 * * @return Integer */ @Override public Integer code() { return code; } /** * 業(yè)務(wù)信息描述 * * @return String */ @Override public String message() { return message; } }
3)引入lamada 定義返回實體
@Data public class Result<T> { /** * 業(yè)務(wù)錯誤碼 */ private Integer code; /** * 信息描述 */ private String message; /** * 返回參數(shù) */ private T data; private Result(IResultStatus resultStatus, T data) { this.code = resultStatus.code(); this.message = resultStatus.message(); this.data = data; } private Result(Integer code, String message, T data) { this.code = code; this.message = message; this.data = data; } /** * 業(yè)務(wù)成功返回業(yè)務(wù)代碼和描述信息 */ public static Result<Void> success() { return new Result<Void>(ResultStatus.SUCCESS, null); } /** * 業(yè)務(wù)成功返回業(yè)務(wù)代碼,描述和返回的參數(shù) */ public static <T> Result<T> success(T data) { return new Result<T>(ResultStatus.SUCCESS, data); } /** * 業(yè)務(wù)成功返回業(yè)務(wù)代碼,描述和返回的參數(shù) */ public static <T> Result<T> success(IResultStatus resultStatus, T data) { if (resultStatus == null) { return success(data); } return new Result<T>(resultStatus, data); } /** * 業(yè)務(wù)成功返回業(yè)務(wù)代碼,描述和返回的參數(shù) */ public static <T> Result<T> success(Integer code, String message, T data) { return new Result<T>(code, message, data); } /** * 業(yè)務(wù)異常返回業(yè)務(wù)代碼和描述信息 */ public static <T> Result<T> fail() { return new Result<T>(ResultStatus.BUSINESS_ERR, null); } /** * 業(yè)務(wù)異常返回業(yè)務(wù)代碼和描述信息 */ public static <T> Result<T> fail(String message) { return new Result<T>(ResultStatus.BUSINESS_ERR.code(), message, null); } /** * 業(yè)務(wù)異常返回業(yè)務(wù)代碼,描述和返回的參數(shù) */ public static <T> Result<T> fail(IResultStatus resultStatus) { return fail(resultStatus, null); } /** * 業(yè)務(wù)異常返回業(yè)務(wù)代碼,描述和返回的參數(shù) */ public static <T> Result<T> fail(IResultStatus resultStatus, String message) { if (resultStatus == null) { return new Result<T>(ResultStatus.BUSINESS_ERR, null); } return new Result<T>(resultStatus.code(), message, null); } }
上述實體我們都定義好了,可以結(jié)合我們的上述jackson 包進行配置json 配置
@Configuration public class JsonSerializeConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); .....這里省去自定義格式類型 } }
那么在使用時通過創(chuàng)建我們的返回實體進行接口返回。
public Result<> call((){ .......省去業(yè)務(wù) return new Result();//根據(jù)構(gòu)造函數(shù)返回 }
到此這篇關(guān)于Springboot設(shè)置統(tǒng)一的返回格式的方法步驟的文章就介紹到這了,更多相關(guān)Springboot設(shè)置統(tǒng)一返回格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot統(tǒng)一數(shù)據(jù)返回格式的實現(xiàn)示例
- SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況
- 詳解SpringBoot中的統(tǒng)一結(jié)果返回與統(tǒng)一異常處理
- SpringBoot返回結(jié)果統(tǒng)一處理實例詳解
- 淺析SpringBoot統(tǒng)一返回結(jié)果的實現(xiàn)
- SpringBoot全局處理統(tǒng)一返回類型方式
- SpringBoot統(tǒng)一返回結(jié)果問題
- 詳解SpringBoot如何統(tǒng)一處理返回的信息
- SpringBoot統(tǒng)一返回格式的方法詳解
- SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式
相關(guān)文章
SpringBoot封裝自己的Starter的實現(xiàn)方法
這篇文章主要介紹了SpringBoot封裝自己的Starter的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04SpringBoot實現(xiàn)文章防盜鏈的代碼設(shè)計
這篇文章主要介紹了SpringBoot實現(xiàn)文章防盜鏈的代碼設(shè)計,文中通過代碼示例講解的非常詳細,對大家實現(xiàn)文章防盜鏈功能有一定的幫助,需要的朋友可以參考下2024-05-052022?最新?IntelliJ?IDEA?詳細配置步驟演示(推薦)
作為一名開發(fā)人員,第一肯定是選擇一款趁手的開發(fā)利器,本人使用?Java?偏多,這里推薦使用?IntelliJ?IDEA,?俗稱神級開發(fā)工具,具體的安裝過程就不過多贅述了,有需要了解的朋友可以參考下本文2022-09-09Java大數(shù)據(jù)開發(fā)Hadoop?MapReduce
MapReduce的思想核心是“分而治之”,適用于大量復(fù)雜的任務(wù)處理場景(大規(guī)模數(shù)據(jù)處理場景)Map負責(zé)“分”,即把復(fù)雜的任務(wù)分解為若干個“簡單的任務(wù)”來并行處理??梢赃M行拆分的前提是這些小任務(wù)可以并行計算,彼此間幾乎沒有依賴關(guān)系2023-03-03java中switch case語句需要加入break的原因解析
這篇文章主要介紹了java中switch case語句需要加入break的原因解析的相關(guān)資料,需要的朋友可以參考下2017-07-07