项目结构
代码
BaffleConfig
public interface BaffleConfig { public static boolean SWITCH = true ; public static String ROOT_PATH = "D:\\TIS\\mock" ; public static String HTTP_FILE_NAME = "http" ; }
BaffleInfos
import java. util. concurrent. ConcurrentHashMap ;
public interface BaffleInfos { public static ConcurrentHashMap < String , MockClientHttpResponse > HTTP_MOCK = new ConcurrentHashMap < > ( ) ;
}
InitializeBaffleInfoRunner
import lombok. extern. slf4j. Slf4j ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. boot. ApplicationArguments ;
import org. springframework. boot. ApplicationRunner ;
import org. springframework. stereotype. Component ;
import java. util. Arrays ;
@Slf4j
@Component
public class InitializeBaffleInfoRunner implements ApplicationRunner { @Autowired private BaffleRead [ ] baffleReads; @Override public void run ( ApplicationArguments args) throws Exception { if ( BaffleConfig . SWITCH ) { log. warn ( "*****************************挡板功能开启*****************************" ) ; Arrays . asList ( baffleReads) . parallelStream ( ) . forEach ( e -> e. read ( ) ) ; } }
}
BaffleRead
public interface BaffleRead { void read ( ) ;
}
MockClientHttpResponse
import org. springframework. http. HttpHeaders ;
import org. springframework. http. HttpStatus ;
import org. springframework. http. MediaType ;
import org. springframework. http. client. ClientHttpResponse ;
import java. io. ByteArrayInputStream ;
import java. io. IOException ;
import java. io. InputStream ; public class MockClientHttpResponse implements ClientHttpResponse { private final byte [ ] body; public MockClientHttpResponse ( byte [ ] body) { this . body = body; } @Override public HttpStatus getStatusCode ( ) throws IOException { return HttpStatus . OK ; } @Override public int getRawStatusCode ( ) throws IOException { return HttpStatus . OK . value ( ) ; } @Override public String getStatusText ( ) throws IOException { return HttpStatus . OK . getReasonPhrase ( ) ; } @Override public void close ( ) { } @Override public InputStream getBody ( ) throws IOException { return new ByteArrayInputStream ( body) ; } @Override public HttpHeaders getHeaders ( ) { HttpHeaders headers = new HttpHeaders ( ) ; headers. setContentType ( MediaType . APPLICATION_JSON ) ; return headers; } }
HttpBaffleRead
import com. tianqiauto. baffle. BaffleInfos ;
import com. tianqiauto. baffle. BaffleConfig ;
import com. tianqiauto. baffle. BaffleRead ;
import com. tianqiauto. baffle. MockClientHttpResponse ;
import lombok. extern. slf4j. Slf4j ;
import org. springframework. http. HttpStatus ;
import org. springframework. stereotype. Component ;
import org. springframework. util. StringUtils ;
import java. io. File ;
import java. io. IOException ;
import java. nio. file. Files ;
import java. util. Arrays ;
@Slf4j
@Component
public class HttpBaffleRead implements BaffleRead { @Override public void read ( ) { File file = new File ( BaffleConfig . ROOT_PATH + File . separator + BaffleConfig . HTTP_FILE_NAME ) ; if ( file. exists ( ) ) { File [ ] files = file. listFiles ( ) ; Arrays . asList ( files) . parallelStream ( ) . forEach ( e -> { String name = StringUtils . stripFilenameExtension ( e. getName ( ) ) ; byte [ ] bytes = new byte [ 0 ] ; try { bytes = Files . readAllBytes ( e. toPath ( ) ) ; } catch ( IOException ex) { log. error ( "【挡板建设时发生错误】文件名:{}" , name, ex) ; } MockClientHttpResponse mockClientHttpResponse = new MockClientHttpResponse ( bytes) ; BaffleInfos . HTTP_MOCK . put ( name, mockClientHttpResponse) ; } ) ; } }
}
MockHttpInterceptor
import com. tianqiauto. baffle. BaffleConfig ;
import com. tianqiauto. baffle. BaffleInfos ;
import com. tianqiauto. baffle. MockClientHttpResponse ;
import org. springframework. http. HttpRequest ;
import org. springframework. http. client. ClientHttpRequestExecution ;
import org. springframework. http. client. ClientHttpRequestInterceptor ;
import org. springframework. http. client. ClientHttpResponse ;
import org. springframework. stereotype. Component ;
import java. io. IOException ;
@Component
public class MockHttpInterceptor implements ClientHttpRequestInterceptor { @Override public ClientHttpResponse intercept ( HttpRequest request, byte [ ] body, ClientHttpRequestExecution execution) throws IOException { if ( BaffleConfig . SWITCH ) { String requestPart = request. getURI ( ) . getSchemeSpecificPart ( ) ; String fileName = RequestFilenameMapping . mapping. get ( requestPart) ; MockClientHttpResponse mockClientHttpResponse = BaffleInfos . HTTP_MOCK . get ( fileName) ; if ( mockClientHttpResponse != null ) return mockClientHttpResponse; } return execution. execute ( request, body) ; }
}
RequestFilenameMapping
import java. util. HashMap ;
public class RequestFilenameMapping { public static HashMap < String , String > mapping; static { mapping = new HashMap < String , String > ( ) ; mapping. put ( "//61.××××:80××/yarn" , "xdd1" ) ; }
}
文件存储位置