项目结构
代码
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" ) ;
}
}
文件存储位置