01.swagger

01.swagger

01.初步swagger

01.初步swagger

API详细说明

注释汇总

作用范围API使用位置
对象属性@ApiModelProperty用在出入参数对象的字段上
协议集描述@Api用于controller类上
协议描述@ApiOperation用在controller的方法上
Response集@ApiResponses用在controller的方法上
Response@ApiResponse用在 @ApiResponses里边
非对象参数集@ApiImplicitParams用在controller的方法上
非对象参数描述@ApiImplicitParam用在@ApiImplicitParams的方法里边
描述返回对象的意义@ApiModel用在返回对象类上
UserController
package com.zhy.system.controller;

@RestController
@RequestMapping("/system/user")
@Api(value = "用户管理")
public class UserController {
    @Autowired
    private UserService userService;
//@RequestMapping("/findUsers")  //做查询权限还是要@RequestMapping
    @GetMapping //查询所有
    @ApiOperation(value = "查询所有的用户信息",notes = "")
    public List<User> findUsers(){
        List<User> list = userService.list();
        return list;
    }
}
XinGuanApplication
package com.zhy;

@SpringBootApplication
@MapperScan("com.zhy.system.mapper")
//开启SwaggerUI
@EnableSwagger2
public class XinGuanApplication {
    public static void main(String[] args) {
        SpringApplication.run(XinGuanApplication.class,args);
    }
}

02.response

02.response

控制器中需要对List 返回的结果进行一个处理,才能与前端进行合理的绑定

CustomizeResultCode
package com.zhy.response;

public interface CustomizeResultCode {
    /**
     * 获取错误状态码
     * @return 错误状态码
     */
    Integer getCode();
    /**
     * 获取错误信息
     * @return 错误信息
     */
    String getMessage();
}
ResultCode
package com.zhy.response;

/**
 * @Author: zhy
 * @Description: 返回码定义
 */
public enum ResultCode implements CustomizeResultCode {
    //4.定义方法,枚举的形式
    /**
     * 20000:"成功"
     */
    SUCCESS(20000, "成功"),
    /**
     * 20001:"失败"
     */
    ERROR(20001, "失败");

    //2.定义属性
    private Integer code;
    private String message;

    //3.构造方法
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    //1.添加对应接口的方法
    @Override
    public Integer getCode() {
        return code;
    }

    //1.添加对应接口的方法
    @Override
    public String getMessage() {
        return message;
    }
}

注解无法使用,将xinguan-base-web的pom的dependencies内容放在xinguan-base-common中

然后让xinguan-base-web得到xinguan-base-common内容

xinguan-base-web的pom.xml

    <dependencies>
        <dependency>
            <groupId>com.zhy</groupId>
            <artifactId>xinguan-base-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
Result
package com.zhy.response;

/**
 * 公共返回结果
 */
@Data
public class Result {
    //1.出入的参数对象
    @ApiModelProperty(value = "是否成功")
    private Boolean success;
    @ApiModelProperty(value = "返回码")
    private Integer code;
    @ApiModelProperty(value = "返回消息")
    private String message;
    @ApiModelProperty(value = "返回数据")
    private Map<String,Object> data = new HashMap<>();

    //2.构造方法私有化,里面的方法都是静态方法
    //达到保护属性的作用
    private Result(){

    }

    //3.这里是使用链式编程
    public static Result ok(){
        Result result = new Result();
        result.setSuccess(true);
        result.setCode(ResultCode.SUCCESS.getCode());
        result.setMessage(ResultCode.SUCCESS.getMessage());
        return result;
    }
    public static Result error(){
        Result result = new Result();
        result.setSuccess(false);
        result.setCode(ResultCode.ERROR.getCode());
        result.setMessage(ResultCode.ERROR.getMessage());
        return result;
    }

    //4.自定义返回成功与否
    public Result success(Boolean success){
        this.setSuccess(success);
        return this;
    }
    //4.自定义返回消息结果
    public Result message(String message){
        this.setMessage(message);
        return this;
    }
    //4.自定义返回(状态码)结果
    public Result code(Integer code){
        this.setCode(code);
        return this;
    }
    //4.自定义返回键值对,返回数据库数据
    //Map.put () 方法将获取 Map 集合的所有键名
    public Result data(String key,Object value){
        this.data.put(key,value);
        return this;
    }
    //set方法设置key所对应的键值,然后返回整个Map结构
    public Result data(Map<String,Object> map){
        this.setData(map);
        return this;
    }
}
UserController
package com.zhy.system.controller;
/**
 * 用户表 前端控制器
 * @author zhy
 */
@RestController
@RequestMapping("/system/user")
@Api(value = "用户管理")
public class UserController {
    @Autowired
    private UserService userService;
//    @RequestMapping("/findUsers")     //做查询权限还是要@RequestMapping
    @GetMapping //查询所有
    @ApiOperation(value = "查询所有的用户信息",notes = "")
    /*
     * 0101编写的遍历
     *     public List<User> findUsers(){
     *         List<User> list = userService.list();
     *         return list;
     *    }
     */
    /**
     *  0102编写的遍历
     *  需求修改:控制器中需要对List<User> 返回的结果进行一个处理,才能与前端进行合理的绑定
     *  编写思路:使用链式编程的方法
     */
        public Result findUsers(){
        List<User> list = userService.list();
        return Result.ok().data("users",list);
    }
}
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@2c9e16f2 testClass = com.huawei.vmall.pms.interfaces.AlphaTest, locations = ["classpath*:META-INF/uuid/uuid_context.xml"], classes = [com.huawei.vmall.pms.front.server.PmsFrontApplication], contextInitializerClasses = [], activeProfiles = ["cse-enable", "r_druid", "w_druid", "REDIS"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [[ImportsContextCustomizer@658d7029 key = [@org.springframework.test.context.ActiveProfiles(inheritProfiles=true, profiles={"cse-enable", "r_druid", "w_druid", "REDIS"}, resolver=org.springframework.test.context.ActiveProfilesResolver.class, value={"cse-enable", "r_druid", "w_druid", "REDIS"}), @org.apiguardian.api.API(consumers={"*"}, since="5.0", status=STABLE), @org.springframework.test.context.BootstrapWith(value=org.springframework.boot.test.context.SpringBootTestContextBootstrapper.class), @com.huawei.vmall.mock.annotations.ProxyScanner(includes={"com.huawei.vmall.fss.client.service"}, excludes={}), @org.springframework.context.annotation.Import(value={com.ctrip.framework.apollo.spring.annotation.ApolloConfigRegistrar.class}), @org.springframework.test.context.ContextConfiguration(classes={}, inheritInitializers=true, inheritLocations=true, initializers={}, loader=org.springframework.test.context.ContextLoader.class, locations={"classpath*:META-INF/uuid/uuid_context.xml"}, name="", value={"classpath*:META-INF/uuid/uuid_context.xml"}), @com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig(value={"application", "global_rocketmq", "global_common"}, order=2147483647), @org.springframework.boot.test.context.SpringBootTest(args={}, classes={com.huawei.vmall.pms.front.server.PmsFrontApplication.class}, properties={}, useMainMethod=NEVER, value={}, webEnvironment=MOCK)]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@607b2792, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@3e598df9, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@38f2e97e, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@7fae4d4a, org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@46baf579, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@39aa45a1, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@b9e9c40d], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at com.huawei.vmall.mock.hotswap.SpringDelegateRunner.agentStart(SpringDelegateRunner.java:125) at com.huawei.vmall.mock.hotswap.SpringDelegateRunner.runTestInWin(SpringDelegateRunner.java:100) at com.huawei.vmall.mock.hotswap.SpringDelegateRunner.runChild(SpringDelegateRunner.java:90) at com.huawei.vmall.mock.hotswap.SpringDelegateRunner.runChild(SpringDelegateRunner.java:49) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61) at org.junit.rules.RunRules.evaluate(RunRules.java:20) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at com.huawei.vmall.mock.hotswap.SpringDelegateRunner.run(SpringDelegateRunner.java:234) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) Caused by: java.lang.IllegalStateException: ServiceComb init failed. at org.apache.servicecomb.core.SCBEngine.run(SCBEngine.java:342) at org.apache.servicecomb.core.SCBApplicationListener.onApplicationEvent(SCBApplicationListener.java:89) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) at org.springframework.boot.context.event.EventPublishingRunListener.ready(EventPublishingRunListener.java:109) at org.springframework.boot.SpringApplicationRunListeners.lambda$ready$6(SpringApplicationRunListeners.java:80) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) at org.springframework.boot.SpringApplicationRunListeners.ready(SpringApplicationRunListeners.java:80) at org.springframework.boot.SpringApplication.run(SpringApplication.java:332) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1461) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ... 34 more Caused by: java.lang.IllegalStateException: generate swagger operation failed, method=org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher:init. at org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator.scanMethods(AbstractSwaggerGenerator.java:249) at org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator.generate(AbstractSwaggerGenerator.java:109) at org.apache.servicecomb.swagger.generator.SwaggerGenerator.generate(SwaggerGenerator.java:32) at org.apache.servicecomb.swagger.engine.SwaggerEnvironment.checkAndGenerateSwagger(SwaggerEnvironment.java:165) at org.apache.servicecomb.swagger.engine.SwaggerEnvironment.createProducer(SwaggerEnvironment.java:109) at org.apache.servicecomb.core.provider.producer.ProducerProviderManager.registerSchema(ProducerProviderManager.java:102) at org.apache.servicecomb.core.provider.producer.ProducerProviderManager.registerProducerMetas(ProducerProviderManager.java:87) at org.apache.servicecomb.core.provider.producer.ProducerProviderManager.init(ProducerProviderManager.java:64) at org.apache.servicecomb.core.SCBEngine.doRun(SCBEngine.java:382) at org.apache.servicecomb.core.SCBEngine.run(SCBEngine.java:329) ... 56 more Caused by: java.lang.IllegalStateException: failed to fill parameter, parameterName=globalRegistry. at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.scanMethodParameter(AbstractOperationGenerator.java:357) at org.apache.servicecomb.swagger.generator.pojo.PojoOperationGenerator.wrapParametersToBody(PojoOperationGenerator.java:91) at org.apache.servicecomb.swagger.generator.pojo.PojoOperationGenerator.tryWrapParametersToBody(PojoOperationGenerator.java:77) at org.apache.servicecomb.swagger.generator.pojo.PojoOperationGenerator.initMethodParameterGenerators(PojoOperationGenerator.java:60) at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.initParameterGenerators(AbstractOperationGenerator.java:230) at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.scanMethodParameters(AbstractOperationGenerator.java:210) at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.generate(AbstractOperationGenerator.java:167) at org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator.scanMethods(AbstractSwaggerGenerator.java:245) ... 65 more Caused by: org.apache.servicecomb.foundation.common.exceptions.ServiceCombException: [simple type, class com.netflix.spectator.api.Clock] is interface. Must be a concrete type. at org.apache.servicecomb.swagger.extend.ModelResolverExt.checkType(ModelResolverExt.java:142) at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolveProperty(ModelResolverExt.java:174) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolveProperty(ModelResolverAdapterJakarta.java:150) at io.swagger.converter.ModelConverterContextImpl.resolveProperty(ModelConverterContextImpl.java:83) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolve(ModelResolverAdapterJakarta.java:544) at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolve(ModelResolverExt.java:157) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolve(ModelResolverAdapterJakarta.java:228) at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:103) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolve(ModelResolverAdapterJakarta.java:312) at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolve(ModelResolverExt.java:157) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolve(ModelResolverAdapterJakarta.java:228) at io.swagger.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:103) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolveProperty(ModelResolverAdapterJakarta.java:200) at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolveProperty(ModelResolverExt.java:185) at org.apache.servicecomb.swagger.jakarta.ModelResolverAdapterJakarta.resolveProperty(ModelResolverAdapterJakarta.java:150) at io.swagger.converter.ModelConverterContextImpl.resolveProperty(ModelConverterContextImpl.java:83) at org.apache.servicecomb.swagger.jakarta.ModelConvertersAdapterJakarta.readAsProperty(ModelConvertersAdapterJakarta.java:86) at org.apache.servicecomb.swagger.jakarta.ModelConvertersAdapterJakarta.readAsProperty(ModelConvertersAdapterJakarta.java:80) at org.apache.servicecomb.swagger.jakarta.ParameterProcessorAdapterJakarta.applyAnnotations(ParameterProcessorAdapterJakarta.java:290) at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.fillBodyParameter(AbstractOperationGenerator.java:426) at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.fillParameter(AbstractOperationGenerator.java:419) at org.apache.servicecomb.swagger.generator.pojo.PojoOperationGenerator.fillParameter(PojoOperationGenerator.java:132) at org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator.scanMethodParameter(AbstractOperationGenerator.java:350) ... 72 more
最新发布
12-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值