Spring Boot项目中的Swagger配置,对于相同的请求模型,需要显示不同的响应,请求模型中的示例

发布于 2025-02-06 13:42:29 字数 1222 浏览 1 评论 0原文

以下是我的2个API的定义:

    @PutMapping("/valA")
    public ResponseEntity<DummyResponse> getValA(@RequestBody DummyModel model) {
        DummyResponse dummyResponse = new DummyResponse();
        dummyResponse.setResA(model.getValA());
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }
    @PutMapping("/valB")
    public ResponseEntity<DummyResponse> getValB(@RequestBody DummyModel model) {
        DummyResponse dummyResponse = new DummyResponse();
        dummyResponse.setResB(model.getValB());
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }

dummymodel.java

package com.dummy.mo.model;

import java.io.Serializable;
import lombok.Data;

@Data
public class DummyModel implements Serializable {
    private String valA;
    private String valB;
}

,现在摇摇晃晃,对于两个API,示例如下所示:

“在此处输入映像”

但是,我的重新构建是仅在第二个API中显示vala和valb in second API在大肆的例子中。我的意思是,我只想显示相应API所需的参数。

是否有任何注释或配置可以在API/控制器级别定义所需的请求参数。 请注意:我无法更改API结构或模型类。

Below is the definition of my 2 APIs:

    @PutMapping("/valA")
    public ResponseEntity<DummyResponse> getValA(@RequestBody DummyModel model) {
        DummyResponse dummyResponse = new DummyResponse();
        dummyResponse.setResA(model.getValA());
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }
    @PutMapping("/valB")
    public ResponseEntity<DummyResponse> getValB(@RequestBody DummyModel model) {
        DummyResponse dummyResponse = new DummyResponse();
        dummyResponse.setResB(model.getValB());
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }

DummyModel.java

package com.dummy.mo.model;

import java.io.Serializable;
import lombok.Data;

@Data
public class DummyModel implements Serializable {
    private String valA;
    private String valB;
}

Now in swagger, For both the apis, example shows like below:

enter image description here

But, my reuirement is to show only valA in first api and valB in second api in swagger example. I mean, I only want to show the params which are required to the corresponding APIs.

Is there any annotation or configuration out there to define required request parameters at API/Controller level.
Note that: I cannot change the API structure or model class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疧_╮線 2025-02-13 13:42:29

您为什么不拆分DummyModel类。

如果我们创建2个接口,则为下面:

public interface One {
        
   String valB = null;
    
   public default String getBalB(){
       return valB;
    }
}

public interface Two {
    String valA = null;

    public default String getBalA(){
        return valA;
    }
}

虚拟模型类

@Data
public class DummyModel implements One, Two{

    private String valB = null;
    private String valA = null;

    public DummyModel(String valA,String valB) {
        this.valB = valB;
        this.valA = valA;
    }
}

更新您的API:

@RestController
public class TestClass {

    @PutMapping("/valA")
    public ResponseEntity<One> getValA(@RequestBody One model) {
        DummyModel dummyResponse = new DummyModel(null,model.getBalB());
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }

    @PutMapping("/valB")
    public ResponseEntity<Two> getValB(@RequestBody Two model) {
        DummyModel dummyResponse = new DummyModel(model.getBalA(),null);
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }
}

Why don't you split the DummyModel class.

What if we, create 2 interfaces like below :

public interface One {
        
   String valB = null;
    
   public default String getBalB(){
       return valB;
    }
}

public interface Two {
    String valA = null;

    public default String getBalA(){
        return valA;
    }
}

Dummy Model class

@Data
public class DummyModel implements One, Two{

    private String valB = null;
    private String valA = null;

    public DummyModel(String valA,String valB) {
        this.valB = valB;
        this.valA = valA;
    }
}

Update your apis :

@RestController
public class TestClass {

    @PutMapping("/valA")
    public ResponseEntity<One> getValA(@RequestBody One model) {
        DummyModel dummyResponse = new DummyModel(null,model.getBalB());
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }

    @PutMapping("/valB")
    public ResponseEntity<Two> getValB(@RequestBody Two model) {
        DummyModel dummyResponse = new DummyModel(model.getBalA(),null);
        return new ResponseEntity<>(dummyResponse, HttpStatus.OK);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文