最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關于swagger配置及踩坑@Api參數(shù)postion無效解決接口排序問題

 更新時間:2022年06月14日 10:02:39   作者:王火火  
這篇文章主要介紹了關于swagger配置及踩坑@Api參數(shù)postion無效解決接口排序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

添加maven依賴

<!-- 集成swagger2 -->
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.9.2</version>
</dependency>
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.9.2</version>
</dependency>
<!--google很好用的一個類庫-->
<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>27.0.1-jre</version>
</dependency>

添加配置類

package top.lidaoyuan.hamster.api.config.swagger; 
import java.util.Arrays; 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;
 
import io.swagger.annotations.ApiOperation;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
@Configuration
@EnableSwagger2
public class Swagger2Config {
 
	@Bean
	public Docket customDocket() {
 
		// 配置全局參數(shù)返回狀態(tài)
		java.util.List<ResponseMessage> resMsgList = Arrays.asList(
				new ResponseMessageBuilder().code(200).message("成功!").build(),
				new ResponseMessageBuilder().code(-1).message("失??!").build(),
				new ResponseMessageBuilder().code(401).message("參數(shù)校驗錯誤!").build(),
				new ResponseMessageBuilder().code(403).message("沒有權限操作,請后臺添加相應權限!").build(),
				new ResponseMessageBuilder().code(500).message("服務器內(nèi)部異常,請稍后重試!").build(),
				new ResponseMessageBuilder().code(501).message("請登錄!").build());
 
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
				.paths(PathSelectors.any())
				.build()
				.globalResponseMessage(RequestMethod.GET, resMsgList)
				.globalResponseMessage(RequestMethod.POST, resMsgList)
				.globalResponseMessage(RequestMethod.PUT, resMsgList)
				.globalResponseMessage(RequestMethod.DELETE, resMsgList);
	}
 
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("Hamster接口文檔")
				.description("接口文檔說明")
				.version("1.0.0")
				.build();
	} 
}

在application.properties中添加配置

logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR

添加控制類UserController

package top.lidaoyuan.hamster.api.web; 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors; 
import javax.validation.Valid;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import top.lidaoyuan.hamster.api.dto.JsonResultDTO;
import top.lidaoyuan.hamster.api.dto.PageInputDTO;
 
import top.lidaoyuan.hamster.api.dto.UserInputDTO;
import top.lidaoyuan.hamster.api.entity.User;
import top.lidaoyuan.hamster.api.service.IUserService;
 
/**
 * 用戶  前端控制器
 * @author Lidy
 * @since 2019-03-06
 */
@Api(tags = {"用戶接口"})
@RestController
@RequestMapping("/v1/user")
@Slf4j
public class UserController {
	
	@Autowired
	private IUserService userService;
	
	@ApiOperation(value = "新增用戶")
	@PostMapping
	public JsonResultDTO create(@RequestBody @Valid UserInputDTO inputDTO, BindingResult bindingResult) {
		log.info("create.inputDTO:" + inputDTO);
		
		boolean hasError = bindingResult.hasErrors();
		log.info("hasError:" + hasError);
		if(hasError) {
			List<String> errMsgList = bindingResult.getAllErrors().stream()
					.map(ObjectError::getDefaultMessage)
					.collect(Collectors.toList());
			return JsonResultDTO.errorArgument(errMsgList.toString());
		}
		
		User userDb = userService.save(inputDTO.convertToEntity());
		
		log.info("create.userDb:" + userDb );
		return JsonResultDTO.ok(inputDTO.convertFor(userDb));
	}
 
	@ApiOperation(value = "獲取單個用戶")
	@GetMapping("{id}")
	public JsonResultDTO getOne(@ApiParam(value = "用戶Id", example = "1", required = true) 
		@PathVariable Integer id) throws Exception {
		
		log.info("getOne.id:" + id);
		User userDb = userService.getOne(id);
		
		log.info("getOne.userDB:" + userDb);
		return JsonResultDTO.ok(new UserInputDTO().convertFor(userDb));
	}
	
	@ApiOperation(value = "更新單個用戶")
	@PutMapping("{id}")
	public JsonResultDTO update(@ApiParam(value = "用戶Id", example = "1", required = true)
			@PathVariable Integer id, @RequestBody UserInputDTO inputDTO) {
		log.info("update.id:" + id + " inputDTO:" + inputDTO );
		User userDb = userService.update(inputDTO.convertToEntity(), id);
		
		log.info("update.userDb:" + userDb );
		return JsonResultDTO.ok(inputDTO.convertFor(userDb));
	}
 
	@ApiOperation(value = "獲取用戶列表")
	@GetMapping("listExample")
	public JsonResultDTO listExample(UserInputDTO inputDTO) {
		log.info("listExample.inputDTO:" + inputDTO);
		List<User> listDb = null;
		if(inputDTO == null) {
			listDb = userService.list();
		}else {
			listDb = userService.list(inputDTO.convertToEntity());
		}
		
		log.info("listExample.listDb:" + listDb);
		if(listDb == null || listDb.size() ==0) return JsonResultDTO.ok();
		
		List<UserInputDTO> inputDTOList = new ArrayList<>();
		for(User user: listDb) {
			inputDTOList.add(inputDTO.convertFor(user));
		}
		
		return JsonResultDTO.ok(inputDTOList);
	}
	
	@ApiOperation(value = "分頁獲取用戶列表")
	@GetMapping("listPageExample")
	public JsonResultDTO listPageExample(UserInputDTO inputDTO, PageInputDTO pageDTO) {
		log.info("listPageExample.inputDTO:" + inputDTO  + " pageDTO:" + pageDTO);
		Page<User> pageDb = null;
		if(inputDTO == null) {
			pageDb = userService.page(pageDTO);
		}else {
			pageDb = userService.page(inputDTO.convertToEntity(), pageDTO);
		}
		
		log.info("listPageExample.pageDb:" + pageDb);
		if(pageDb == null || pageDb.getSize() ==0) {
			return JsonResultDTO.ok();
		}
		
		List<UserInputDTO> inputDTOList = new ArrayList<>();
		for(User user: pageDb) {
			inputDTOList.add(inputDTO.convertFor(user));
		}
		
		return JsonResultDTO.page(inputDTOList,pageDb.getTotalElements());
	}
 
	@ApiOperation(value = "刪除用戶")
	@DeleteMapping("{id}")
	public JsonResultDTO deleteById(@ApiParam(value = "用戶Id", example = "1", required = true)
		@PathVariable Integer id) {
		log.info("del.id:" + id);
		userService.deleteById(id);
		return JsonResultDTO.ok();
	}	
}
 

請求對象類DTO

package top.lidaoyuan.hamster.api.dto; 
import java.io.Serializable; 
import com.google.common.base.Converter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
 
import lombok.*;
import lombok.experimental.Accessors;
 
import javax.validation.constraints.*;
 
import top.lidaoyuan.hamster.api.entity.User;
import top.lidaoyuan.hamster.utils.BeanUtils;
 
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
 
/**
 *	用戶DTO
 * @author Lidy
 * @since 2019-03-06
 */
@ApiModel(value = "用戶Model")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString
@JsonInclude(Include.NON_NULL)
public class UserInputDTO implements Serializable { 
	private static final long serialVersionUID = 1L;
 
	/** ID */
	@ApiModelProperty(hidden = true)
	private Integer id;
 
	/** 是否激活 */
	@ApiModelProperty(value = "是否激活", position = 1)
	private Boolean active;
 
	/** 年齡 */
	@ApiModelProperty(value = "年齡", position = 2)
	private Integer age;
 
	/** email */
	@ApiModelProperty(value = "email", position = 3)
	@Email(message = "郵箱格式不正確")
	@NotBlank(message = "【email】不能為空")
	@Size(max = 255, message = "【email】字段長度應<255")
	private String email;
 
	/** 姓 */
	@ApiModelProperty(value = "姓", position = 4)
	@NotBlank(message = "【姓】不能為空")
	@Size(max = 10, message = "【姓】字段長度應<10")
	private String firstname;
 
	/** 名 */
	@ApiModelProperty(value = "名", position = 5)
	@Size(max = 20, message = "【名】字段長度應<20")
	private String lastname;
 
	/** 開始時間 */
	@ApiModelProperty(value = "開始時間", example = "2019-03-06 17:09:10", position = 6)
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	private Date startDate;
 
	/** 結束時間 */
	@ApiModelProperty(value = "結束時間", example = "2019-03-06 17:09:10", position = 7)
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	private Date endDate;
 
 
	/** 轉(zhuǎn)換成實體類 */
	public User convertToEntity() {
		return new UserInputDTOConver().convert(this);
	}
 
	/** 轉(zhuǎn)換成InputDTO */
	public UserInputDTO convertFor(User bean) {
		return new UserInputDTOConver().reverse().convert(bean);
	}
	
	/** Conver轉(zhuǎn)換類 */
	private static class UserInputDTOConver extends Converter<UserInputDTO, User> {
		@Override
		protected User doForward(UserInputDTO dto) {
			User bean = new User();
			BeanUtils.copyProperties(dto, bean);
			return bean;
		}
 
		@Override
		protected UserInputDTO doBackward(User bean) {
			UserInputDTO dto = new UserInputDTO();
			BeanUtils.copyProperties(bean, dto);
			return dto;
		}
	} 
} 
 

響應對象類

package top.lidaoyuan.hamster.api.dto; 
import java.util.Arrays;
import java.util.List; 
import org.springframework.data.domain.Page;
 
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
 
/**
 * 	Json結果DTO
 * @author ex-lidy001
 *
 */
@ApiModel(value = "返回JSON對象")
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(Include.NON_NULL)
public class JsonResultDTO {
	
	@ApiModelProperty(value = "狀態(tài)碼;200:成功")
	private Integer code;
	
	@ApiModelProperty(value = "狀態(tài)說明")
	private String msg;
	
	@ApiModelProperty(value = "總記錄數(shù)")
	private Long total;
	
	@ApiModelProperty(value = "返回數(shù)據(jù)")
	private Object data;	
	public JsonResultDTO(Integer code, String msg) {
		this.code = code;
		this.msg = msg;
		this.data = Arrays.asList();
	}
	
	public JsonResultDTO(Integer code, String msg, Object data) {
		this.code = code;
		this.msg = msg;
		this.data = data;
		if(data == null) {
			this.data = Arrays.asList();
		}
	}	
	
	public static JsonResultDTO ok() {
		return new JsonResultDTO(200, "成功");
	}
	
	public static JsonResultDTO ok(String msg) {
		return new JsonResultDTO(200, msg);
	}
	
	public static JsonResultDTO ok(Object data) {
		return new JsonResultDTO(200, "成功", data);
	}
	
	public static JsonResultDTO page(Page<?> page) {
		JsonResultDTO jrDTO = new JsonResultDTO(200, "成功", page.getContent());
		jrDTO.setTotal(page.getTotalElements());
		return jrDTO;
	}
	
	public static JsonResultDTO page(List<?> list, Long total) {
		JsonResultDTO jrDTO = new JsonResultDTO(200, "成功", list);
		jrDTO.setTotal(total);
		return jrDTO;
	}
	
	public static JsonResultDTO error() {
		return new JsonResultDTO(-1, "失敗!");
	}
	
	public static JsonResultDTO error(String msg) {
		return new JsonResultDTO(-1, msg);
	}
 
	public static JsonResultDTO errorArgument(String msg) {
		return new JsonResultDTO(401, "參數(shù)校驗:" + msg);
	}
 
	public static JsonResultDTO unAuth() {
		return new JsonResultDTO(403, "沒有權限!");
	}
	
	public static JsonResultDTO unlogin() {
		return new JsonResultDTO(501, "請登錄!");
	}
 
	public static JsonResultDTO exception(String msg) {
		return new JsonResultDTO(500, "系統(tǒng)內(nèi)部錯誤:" + msg);
	} 
}
 

最后,上效果圖

請求路徑http://localhost:8080/swagger-ui.html

請求

響應

最后還有個坑

在使用最新版的springfox-swagger2 2.9.2``position排序的時候沒有生效,后來在網(wǎng)上找了相關資料,需要重寫swagger的兩個類,具體如下。

package top.lidaoyuan.hamster.api.config.swagger; 
import java.util.List;
import java.util.stream.Collectors;
 
import org.springframework.context.annotation.Primary;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
 
import io.swagger.models.parameters.Parameter;
import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl;
 
/**
 * Created by wujie on 2019/2/16.
 * 重寫 將Document轉(zhuǎn)換成Swagger 類, 根據(jù)order進行排序
 */
@Primary //同一個接口,可能會有幾種不同的實現(xiàn)類,而默認只會采取其中一種的情況下
@Component("ServiceModelToSwagger2Mapper")
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CustomModelToSwaggerMapper extends ServiceModelToSwagger2MapperImpl {
 
    @Override
    protected List<Parameter> parameterListToParameterList(List<springfox.documentation.service.Parameter> list) {
        //list需要根據(jù)order|postion排序
        list = list.stream().sorted((p1, p2) -> Integer.compare(p1.getOrder(), p2.getOrder())).collect(Collectors.toList());
//        log.debug("************************************list:{}", list.toString());
        return super.parameterListToParameterList(list);
    }
}
package top.lidaoyuan.hamster.api.config.swagger; 
import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER; 
import java.util.Arrays;
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
 
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
 
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.service.AllowableListValues;
import springfox.documentation.service.AllowableValues;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.EnumTypeDeterminer;
import springfox.documentation.spi.service.ExpandedParameterBuilderPlugin;
import springfox.documentation.spi.service.contexts.ParameterExpansionContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
import springfox.documentation.swagger.readers.parameter.Examples;
import springfox.documentation.swagger.schema.ApiModelProperties;
 
/**
 * Created by wujie on 2019/2/16.
 * 自定義ExpandedParameterBuilderPlugin,主要是修正源碼query傳入請求參數(shù)postion無效
 * 這里,將postion賦值給order
 */
@Primary
@Component
public class CustomSwaggerParameterBuilder implements ExpandedParameterBuilderPlugin {
 
    private final DescriptionResolver descriptions;
    private final EnumTypeDeterminer enumTypeDeterminer;
 
    @Autowired
    public CustomSwaggerParameterBuilder(
            DescriptionResolver descriptions,
            EnumTypeDeterminer enumTypeDeterminer) {
        this.descriptions = descriptions;
        this.enumTypeDeterminer = enumTypeDeterminer;
    }
 
    @Override
    public void apply(ParameterExpansionContext context) {
        Optional<ApiModelProperty> apiModelPropertyOptional = context.findAnnotation(ApiModelProperty.class);
        if (apiModelPropertyOptional.isPresent()) {
            fromApiModelProperty(context, apiModelPropertyOptional.get());
        }
        Optional<ApiParam> apiParamOptional = context.findAnnotation(ApiParam.class);
        if (apiParamOptional.isPresent()) {
            fromApiParam(context, apiParamOptional.get());
        }
    }
 
    @Override
    public boolean supports(DocumentationType delimiter) {
        return SwaggerPluginSupport.pluginDoesApply(delimiter);
    }
 
    private void fromApiParam(ParameterExpansionContext context, ApiParam apiParam) {
        String allowableProperty = Strings.emptyToNull(apiParam.allowableValues());
        AllowableValues allowable = allowableValues(
        		Optional.fromNullable(allowableProperty),
                context.getFieldType().getErasedType());
 
        maybeSetParameterName(context, apiParam.name())
                .description(descriptions.resolve(apiParam.value()))
                .defaultValue(apiParam.defaultValue())
                .required(apiParam.required())
                .allowMultiple(apiParam.allowMultiple())
                .allowableValues(allowable)
                .parameterAccess(apiParam.access())
                .hidden(apiParam.hidden())
                .scalarExample(apiParam.example())
                .complexExamples(Examples.examples(apiParam.examples()))
                .order(SWAGGER_PLUGIN_ORDER)
                .build();
    }
 
    private void fromApiModelProperty(ParameterExpansionContext context, ApiModelProperty apiModelProperty) {
        String allowableProperty = Strings.emptyToNull(apiModelProperty.allowableValues());
        AllowableValues allowable = allowableValues(
        		Optional.fromNullable(allowableProperty),
                context.getFieldType().getErasedType());
 
        maybeSetParameterName(context, apiModelProperty.name())
                .description(descriptions.resolve(apiModelProperty.value()))
                .required(apiModelProperty.required())
                .allowableValues(allowable)
                .parameterAccess(apiModelProperty.access())
                .hidden(apiModelProperty.hidden())
                .scalarExample(apiModelProperty.example())
                .order(apiModelProperty.position()) //源碼這里是: SWAGGER_PLUGIN_ORDER,需要修正
                .build();
    }
 
    private ParameterBuilder maybeSetParameterName(ParameterExpansionContext context, String parameterName) {
        if (!Strings.isNullOrEmpty(parameterName)) {
            context.getParameterBuilder().name(parameterName);
        }
        return context.getParameterBuilder();
    }
 
    private AllowableValues allowableValues(final Optional<String> optionalAllowable, Class<?> fieldType) {
 
        AllowableValues allowable = null;
        if (enumTypeDeterminer.isEnum(fieldType)) {
            allowable = new AllowableListValues(getEnumValues(fieldType), "LIST");
        } else if (optionalAllowable.isPresent()) {
            allowable = ApiModelProperties.allowableValueFromString(optionalAllowable.get());
        }
        return allowable;
    }
 
    private List<String> getEnumValues(final Class<?> subject) {
        return Lists.transform(Arrays.asList(subject.getEnumConstants()), new Function<Object, String>() {
            @Override
            public String apply(final Object input) {
                return input.toString();
            }
        });
    }
}
 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • 解析ConcurrentHashMap: 紅黑樹的代理類(TreeBin)

    解析ConcurrentHashMap: 紅黑樹的代理類(TreeBin)

    ConcurrentHashMap是由Segment數(shù)組結構和HashEntry數(shù)組結構組成。Segment的結構和HashMap類似,是一種數(shù)組和鏈表結構,今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧
    2021-06-06
  • springboot -sse -flux 服務器推送消息的方法

    springboot -sse -flux 服務器推送消息的方法

    這篇文章主要介紹了springboot -sse -flux 服務器推送消息的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • java中實現(xiàn)控制臺打印sql語句方式

    java中實現(xiàn)控制臺打印sql語句方式

    這篇文章主要介紹了java中實現(xiàn)控制臺打印sql語句方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java瀏覽器文件打包下載過程解析

    java瀏覽器文件打包下載過程解析

    這篇文章主要介紹了java瀏覽器文件打包下載過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java 中比較對象的用法小結

    Java 中比較對象的用法小結

    在 Java 中,比較對象的方法有多種多樣,每種都有其適用的場景,通過深入理解 equals() 方法、Comparable 接口和 Comparator 接口,我們能夠更好地處理對象之間的比較,使代碼更加靈活、清晰和健壯,本文給大家介紹Java 中比較對象的用法,感興趣的朋友一起看看吧
    2023-12-12
  • java Swing實現(xiàn)選項卡功能(JTabbedPane)實例代碼

    java Swing實現(xiàn)選項卡功能(JTabbedPane)實例代碼

    這篇文章主要介紹了java Swing實現(xiàn)選項卡功能(JTabbedPane)實例代碼的相關資料,學習java 基礎的朋友可以參考下這個簡單示例,需要的朋友可以參考下
    2016-11-11
  • Java中for循環(huán)的執(zhí)行過程分析

    Java中for循環(huán)的執(zhí)行過程分析

    這篇文章主要介紹了Java中for循環(huán)的執(zhí)行過程,實例分析了for循環(huán)的執(zhí)行原理與順序,對于深入理解Java具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Java利用文件輸入輸出流實現(xiàn)文件夾內(nèi)所有文件拷貝到另一個文件夾

    Java利用文件輸入輸出流實現(xiàn)文件夾內(nèi)所有文件拷貝到另一個文件夾

    這篇文章主要介紹了Java實現(xiàn)文件夾內(nèi)所有文件拷貝到另一個文件夾,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java連接zookeeper實現(xiàn)zookeeper教程

    java連接zookeeper實現(xiàn)zookeeper教程

    這篇文章主要介紹了java連接zookeeper實現(xiàn)zookeeper教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringCloud OpenFeign超時控制示例詳解

    SpringCloud OpenFeign超時控制示例詳解

    在Spring Cloud中使用OpenFeign時,可以通過配置來控制請求的超時時間,這篇文章主要介紹了SpringCloud OpenFeign超時控制,需要的朋友可以參考下
    2024-05-05

最新評論

阿克苏市| 盐边县| 武鸣县| 二手房| 应用必备| 岑巩县| 芜湖市| 虞城县| 安平县| 定结县| 普陀区| 双鸭山市| 蒲城县| 浦县| 湘阴县| 无锡市| 永平县| 齐河县| 临城县| 临漳县| 松溪县| 井研县| 阿图什市| 婺源县| 庄河市| 微博| 镇康县| 宣城市| 渭源县| 黄骅市| 兴海县| 绥化市| 靖州| 安福县| 靖安县| 金溪县| 上饶市| 旅游| 特克斯县| 晋州市| 微山县|