Springboot設(shè)置統(tǒng)一的返回格式的方法步驟
在我們應(yīng)用中我們通常與前端交互使用json 格式,設(shè)置統(tǒng)一的返回json 格式是非常必要的,可以減少開(kāi)發(fā)人員的工作量。
第一個(gè)使用統(tǒng)一的消息轉(zhuǎn)換器,這里使用jackson 的相關(guān)功能,引入jar
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>創(chuàng)建一個(gè)全局配置類(GlobalConfig)并使用
@Configuration注解標(biāo)記該類為配置類。然后,在該類上使用@EnableWebMvc注解開(kāi)啟對(duì)MVC的支持。- 在該配置類中重寫(xiě)
configureMessageConverters()方法,將Jackson消息轉(zhuǎn)換器添加到默認(rè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)定義一個(gè)返回結(jié)果 IResultStatus
public interface IResultStatus {
/**
* 業(yè)務(wù)狀態(tài)碼
* @return Integer
*/
Integer code();
/**
* 業(yè)務(wù)信息描述
* @return String
*/
String message();
}
2)創(chuàng)建一個(gè)枚舉實(shí)體
public enum ResultStatus implements IResultStatus {
/**
* 成功
*/
SUCCESS(200, "OK"),
/**
* 錯(cuò)誤的請(qǐng)求,參數(shù)異常
*/
BAD_REQUEST(400, "Bad Request params exception"),
/**
* 服務(wù)器異常
*/
INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
/**
* 401 未認(rèn)證異常
*/
UNAUTHORIZED(401, "認(rèn)證異常"),
/**
* 業(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 定義返回實(shí)體
@Data
public class Result<T> {
/**
* 業(yè)務(wù)錯(cuò)誤碼
*/
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);
}
}上述實(shí)體我們都定義好了,可以結(jié)合我們的上述jackson 包進(jìn)行配置json 配置
@Configuration
public class JsonSerializeConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
.....這里省去自定義格式類型
}
}那么在使用時(shí)通過(guò)創(chuàng)建我們的返回實(shí)體進(jìn)行接口返回。
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot統(tǒng)一數(shù)據(jù)返回格式的實(shí)現(xiàn)示例
- SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況
- 詳解SpringBoot中的統(tǒng)一結(jié)果返回與統(tǒng)一異常處理
- SpringBoot返回結(jié)果統(tǒng)一處理實(shí)例詳解
- 淺析SpringBoot統(tǒng)一返回結(jié)果的實(shí)現(xiàn)
- SpringBoot全局處理統(tǒng)一返回類型方式
- SpringBoot統(tǒng)一返回結(jié)果問(wèn)題
- 詳解SpringBoot如何統(tǒng)一處理返回的信息
- SpringBoot統(tǒng)一返回格式的方法詳解
- SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式
相關(guān)文章
SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
使用SpringBoot代碼詳細(xì)解釋<List>的用法
List是Java集合框架中的一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)一組有序的元素,使用List可以方便地向其中添加、刪除或者修改元素,也可以通過(guò)下標(biāo)或者迭代器遍歷其中的元素,這篇文章主要介紹了用SpringBoot代碼詳細(xì)解釋<List>的用法,需要的朋友可以參考下2023-09-09
SpringBoot實(shí)現(xiàn)文章防盜鏈的代碼設(shè)計(jì)
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)文章防盜鏈的代碼設(shè)計(jì),文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家實(shí)現(xiàn)文章防盜鏈功能有一定的幫助,需要的朋友可以參考下2024-05-05
2022?最新?IntelliJ?IDEA?詳細(xì)配置步驟演示(推薦)
作為一名開(kāi)發(fā)人員,第一肯定是選擇一款趁手的開(kāi)發(fā)利器,本人使用?Java?偏多,這里推薦使用?IntelliJ?IDEA,?俗稱神級(jí)開(kāi)發(fā)工具,具體的安裝過(guò)程就不過(guò)多贅述了,有需要了解的朋友可以參考下本文2022-09-09
IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié)
這篇文章主要介紹了IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
java使用PageInfo的list通用分頁(yè)處理demo
這篇文章主要為大家介紹了java使用PageInfo的list通用分頁(yè)處理demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2023-12-12
Java大數(shù)據(jù)開(kāi)發(fā)Hadoop?MapReduce
MapReduce的思想核心是“分而治之”,適用于大量復(fù)雜的任務(wù)處理場(chǎng)景(大規(guī)模數(shù)據(jù)處理場(chǎng)景)Map負(fù)責(zé)“分”,即把復(fù)雜的任務(wù)分解為若干個(gè)“簡(jiǎn)單的任務(wù)”來(lái)并行處理??梢赃M(jìn)行拆分的前提是這些小任務(wù)可以并行計(jì)算,彼此間幾乎沒(méi)有依賴關(guān)系2023-03-03
java中switch case語(yǔ)句需要加入break的原因解析
這篇文章主要介紹了java中switch case語(yǔ)句需要加入break的原因解析的相關(guān)資料,需要的朋友可以參考下2017-07-07

