Backend-Projekt-benutzerdefiniertes Interface-Antwort-Ergebnisdesign JsonResult

Der Artikel ist eine Fortsetzung von oben:Hinzufügen, Löschen, Ändern und Überprüfen der Back-End-Schnittstelle

Der oben zurückgegebene Wert liegt im String-Format vor, was offensichtlich unangemessen ist.
Unter normalen Umständen erfolgt die Rückgabe an die Rezeption im Objektformat. Markieren Sie in Kombination mit dem Hinzufügen der @RestController-Annotation zur Klasse alle Anforderungsverarbeitungsmethoden in dieser Klasse als Antworttext (Json Der Grund dafür ist, dass die Annotation @ResponseBody zur Klasse @RestController hinzugefügt wird.
Ebenso müssen wir den an die Rezeption zurückgegebenen Datenstil standardisieren, damit die Rezeption die Antwort standardisieren kann.

1. Benutzerdefinierte Serverantwortklasse, z. B. JsonResult

Erstellen Sieweb.JsonResult eine Klasse (benutzerdefinierter Klassenname) unter dem Stammpaket des Projekts und deklarieren Sie in der Klasse die Datenattribute, die dem Client geantwortet werden müssen, was auch möglich ist wird als Deklaration der erwarteten Antwort verstanden. Eigenschaften in JSON-Daten:

/**
 * 响应json
 *
 * @author luoyang
 * @date 2023/12/16
 */
@Data
@Slf4j
@NoArgsConstructor
@AllArgsConstructor
//@JsonInclude(JsonInclude.Include.NON_NULL) //配置在类上,所以属性为空是都不展示该属性
public class JsonResult implements Serializable {
    
    
    private Integer code;
    // @JsonInclude用于配置“此属性什么时候会包含在JSON结果中”
    // NON_NULL 表示 不为null的时候
//    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String message;

    public static JsonResult ok() {
    
    
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(ServiceCode.OK.getValue());
        return jsonResult;
    }

    public static JsonResult fail(ServiceCode serviceCode, String message) {
    
    
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(serviceCode.getValue());
        jsonResult.setMessage(message);
        log.error("JsonResult fail  serviceCode {}, message{}", serviceCode, message);
        return jsonResult;
    }

    public static JsonResult fail(CustomServiceException e) {
    
    
        return fail(e.getServiceCode(), e.getMessage());
    }
}

Unter anderem sollten diese Statuscodes in speziellen Typen definiert werden, um Statuscodes besser verwalten zu können.
Verwenden Sie Aufzählungsobjekte. Hinweis: Jeder Aufzählungswert. Tatsächlich sind sie sind alle Objekte des aktuellen Aufzählungstyps
Erstellen Sie beispielsweise die Klasse web.ServiceCode unter dem Stammpaket des Projekts, um verschiedene Geschäftsstatuscodes zu verwalten, die verwendet werden können:

package com.luoyang.small.web;


/**
 * @author luoyang
 * @date 2023/12/16
 */
public enum ServiceCode {
    
    

    // 注意:每一个枚举值,其实都是当前枚举类型的对象
    // 注意:请将以下语法理解为“通过带参数的构造方法创建枚举类型的对象”
    // 注意:由于通过构造方法传入了值,所以,每个枚举类型的对象都带有一个数字值,后续可以getValue()取出
    OK(200),
    ERR_NOT_FOUND(404),
    ERR_CONFLICT(409),
    ERR_CUSTOM(1000);

    // 以下属性,表示每个枚举类型的对象都有一个Integer value属性,此属性的值将通过构造方法传入
    private Integer value;

    // 显式的声明枚举的带Integer参数的构造方法,用于创建枚举类型的对象时,为其Integer value属性赋值
    // 注意:枚举的构造方法的访问权限固定是私有的(Java语法特征)
    //      不写访问权限,并不表示“默认的”,而是“私有的”
    //      写public / protected是错误的
    //      写private是多余的
    ServiceCode(Integer value) {
    
    
        this.value = value;
    }

    // 用于通过枚举对象获取Integer value属性的值
    public Integer getValue() {
    
    
        return value;
    }
}

2. Verwenden Sie JsonResult, um die Antwortklasse anzupassen

    //在线文档注解
    @ApiOperation("根据相册对象删除相册")//接口名注解
    @ApiImplicitParam(name = "albumName", value = "相册对象", required = true,
            example = "小米9相册", dataType = "String")//参数名注解
    @ApiOperationSupport(order = 1)//接口展示排序
    //直接网络请求删除
    //http://localhost:8080/album/delete?name=TestAlbum001
    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public JsonResult deleteAlbum(String albumName) {
    
    
        log.debug("开始处理【根据相册名删除】的请求,参数:{}", albumName);
        if (albumName == null || albumName.isEmpty()) {
    
    
            return JsonResult.fail(ServiceCode.ERR_CUSTOM, "删除相册的名称为空");
        }
        try {
    
    
            albumService.deleteAlbum(albumName);
            return JsonResult.ok();
        } catch (Exception e) {
    
    
            String message = e.getMessage();
            log.error("deleteAlbum Exception {}", message);
            return JsonResult.fail(ServiceCode.ERR_CUSTOM, message);
        }
    }

Fügen Sie hier eine Bildbeschreibung einFügen Sie hier eine Bildbeschreibung ein

3. Wenn alle Json-Attribute leer sind, werden die entsprechenden Attribute nicht angezeigt.

Der Client antwortet mit Ergebnissen im JSON-Format. In einigen Fällen gibt es einige Attribute, deren Werte sindnull

{
    
    
  "code": 200,
  "message": null
}

Es ist nicht erforderlich, auf die Attribute und höher message zu reagieren. Der Wert dieses Attributs muss der Wert null sein. < a i=3> kann sein: Konfigurieren Sie die Annotation für das Attribut, das dem Antwortergebnis entspricht, zum Beispiel:
@JsonInclude

@Data
public class JsonResult implements Serializable {
    
    

    private Integer code;
    
    // @JsonInclude用于配置“此属性什么时候会包含在JSON结果中”
    // NON_NULL 表示 不为null的时候
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String message;  
}

Alternativ können Sie diese Annotation auch zur Klasse hinzufügen. Dann hat jedes Attribut in der Klasse diese Konfiguration:

@Data
@JsonInclude(JsonInclude.Include.NON_NULL) // 在类上配置,每个属性都遵循此配置
public class JsonResult implements Serializable {
    
    

    private Integer code;
    private String message;
    
}

Jemand, anwesend application.ymlHinzugefügt in:

# Spring相关配置
spring:
  # jackson框架的相关配置
  jackson:
    # 服务器端响应JSON结果时,JSON结果中默认包含哪些属性
    default-property-inclusion: non_null

Fügen Sie hier eine Bildbeschreibung ein
Schaffen Sie Werte und teilen Sie sie gerne!
Beginnen wir mit dem Backend 204146007

おすすめ

転載: blog.csdn.net/ly_xiamu/article/details/135044674