JAVA-2423 Move/rename module spring-rest-compress
- Removing spring-rest-compress module as its contents have been moved to spring-resttemplate-2
This commit is contained in:
		
							parent
							
								
									d1cc5e98bd
								
							
						
					
					
						commit
						cc0e244ce4
					
				
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							| @ -697,7 +697,6 @@ | ||||
|                 <module>spring-reactor</module> | ||||
|                 <module>spring-remoting</module> | ||||
|                 <module>spring-rest-angular</module> | ||||
|                 <module>spring-rest-compress</module> | ||||
|                 <module>spring-rest-http</module> | ||||
|                 <module>spring-rest-http-2</module> | ||||
|                 <module>spring-rest-query-language</module> | ||||
| @ -1200,7 +1199,6 @@ | ||||
|                 <module>spring-reactor</module> | ||||
|                 <module>spring-remoting</module> | ||||
|                 <module>spring-rest-angular</module> | ||||
|                 <module>spring-rest-compress</module> | ||||
|                 <module>spring-rest-http</module> | ||||
|                 <module>spring-rest-query-language</module> | ||||
|                 <module>spring-rest-shell</module> | ||||
|  | ||||
| @ -1,6 +0,0 @@ | ||||
| ## Spring REST Compress | ||||
| 
 | ||||
| This module contains articles about request compression with Spring | ||||
| 
 | ||||
| ### Relevant Articles: | ||||
| - [How to compress requests using the Spring RestTemplate](https://www.baeldung.com/spring-resttemplate-compressing-requests) | ||||
| @ -1,65 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>spring-rest-compress</artifactId> | ||||
|     <version>0.0.1-SNAPSHOT</version> | ||||
|     <name>spring-rest-compress</name> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-boot-2</artifactId> | ||||
|         <version>0.0.1-SNAPSHOT</version> | ||||
|         <relativePath>../parent-boot-2</relativePath> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-web</artifactId> | ||||
|             <exclusions> | ||||
|                 <exclusion> | ||||
|                     <groupId>org.springframework.boot</groupId> | ||||
|                     <artifactId>spring-boot-starter-tomcat</artifactId> | ||||
|                 </exclusion> | ||||
|             </exclusions> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-jetty</artifactId> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.apache.httpcomponents</groupId> | ||||
|             <artifactId>httpclient</artifactId> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>commons-io</groupId> | ||||
|             <artifactId>commons-io</artifactId> | ||||
|             <version>${commons-io.version}</version> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-test</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
|         <plugins> | ||||
|             <plugin> | ||||
|                 <groupId>org.springframework.boot</groupId> | ||||
|                 <artifactId>spring-boot-maven-plugin</artifactId> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <java.version>1.8</java.version> | ||||
|         <commons-io.version>2.6</commons-io.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -1,38 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.http.HttpHeaders; | ||||
| import org.springframework.http.HttpRequest; | ||||
| import org.springframework.http.client.ClientHttpRequestExecution; | ||||
| import org.springframework.http.client.ClientHttpRequestInterceptor; | ||||
| import org.springframework.http.client.ClientHttpResponse; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| public class CompressingClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { | ||||
| 
 | ||||
|     private static final Logger LOG = LoggerFactory.getLogger(CompressingClientHttpRequestInterceptor.class); | ||||
| 
 | ||||
|     private static final String GZIP_ENCODING = "gzip"; | ||||
| 
 | ||||
|     /** | ||||
|      * Compress a request body using Gzip and add Http headers. | ||||
|      * | ||||
|      * @param req | ||||
|      * @param body | ||||
|      * @param exec | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     @Override | ||||
|     public ClientHttpResponse intercept(HttpRequest req, byte[] body, ClientHttpRequestExecution exec) | ||||
|             throws IOException { | ||||
|         LOG.info("Compressing request..."); | ||||
|         HttpHeaders httpHeaders = req.getHeaders(); | ||||
|         httpHeaders.add(HttpHeaders.CONTENT_ENCODING, GZIP_ENCODING); | ||||
|         httpHeaders.add(HttpHeaders.ACCEPT_ENCODING, GZIP_ENCODING); | ||||
|         return exec.execute(req, GzipUtils.compress(body)); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,52 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.apache.commons.codec.Charsets; | ||||
| import org.apache.commons.io.IOUtils; | ||||
| 
 | ||||
| import java.io.ByteArrayInputStream; | ||||
| import java.io.ByteArrayOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.util.zip.GZIPInputStream; | ||||
| import java.util.zip.GZIPOutputStream; | ||||
| 
 | ||||
| public class GzipUtils { | ||||
| 
 | ||||
|     /** | ||||
|      * Gzip a string. | ||||
|      * | ||||
|      * @param text | ||||
|      * @return | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public static byte[] compress(String text) throws Exception { | ||||
|         return GzipUtils.compress(text.getBytes(Charsets.UTF_8)); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gzip a byte array. | ||||
|      * | ||||
|      * @param body | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public static byte[] compress(byte[] body) throws IOException { | ||||
|         ByteArrayOutputStream baos = new ByteArrayOutputStream(); | ||||
|         try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(baos)) { | ||||
|             gzipOutputStream.write(body); | ||||
|         } | ||||
|         return baos.toByteArray(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Decompress a Gzipped byte array to a String. | ||||
|      * | ||||
|      * @param body | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public static String decompress(byte[] body) throws IOException { | ||||
|         try (GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(body))) { | ||||
|             return IOUtils.toString(gzipInputStream, Charsets.UTF_8); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,38 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.eclipse.jetty.server.handler.HandlerCollection; | ||||
| import org.eclipse.jetty.server.handler.gzip.GzipHandler; | ||||
| import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| 
 | ||||
| /** | ||||
|  * Configure Jetty web server so it handles compressed requests. | ||||
|  */ | ||||
| @Configuration | ||||
| public class JettyWebServerConfiguration { | ||||
| 
 | ||||
|     private static final int MIN_BYTES = 1; | ||||
| 
 | ||||
|     /** | ||||
|      * Customise the Jetty web server to automatically decompress requests. | ||||
|      */ | ||||
|     @Bean | ||||
|     public JettyServletWebServerFactory jettyServletWebServerFactory() { | ||||
| 
 | ||||
|         JettyServletWebServerFactory factory = new JettyServletWebServerFactory(); | ||||
|         factory.addServerCustomizers(server -> { | ||||
| 
 | ||||
|             GzipHandler gzipHandler = new GzipHandler(); | ||||
|             // Enable request decompression | ||||
|             gzipHandler.setInflateBufferSize(MIN_BYTES); | ||||
|             gzipHandler.setHandler(server.getHandler()); | ||||
| 
 | ||||
|             HandlerCollection handlerCollection = new HandlerCollection(gzipHandler); | ||||
|             server.setHandler(handlerCollection); | ||||
|         }); | ||||
| 
 | ||||
|         return factory; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,29 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| public class Message { | ||||
| 
 | ||||
|     private String text; | ||||
| 
 | ||||
|     public Message() { | ||||
|     } | ||||
| 
 | ||||
|     public Message(String text) { | ||||
|         this.text = text; | ||||
|     } | ||||
| 
 | ||||
|     public String getText() { | ||||
|         return text; | ||||
|     } | ||||
| 
 | ||||
|     public void setText(String text) { | ||||
|         this.text = text; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         final StringBuilder sb = new StringBuilder("Message {"); | ||||
|         sb.append("text='").append(text).append('\''); | ||||
|         sb.append('}'); | ||||
|         return sb.toString(); | ||||
|     } | ||||
| } | ||||
| @ -1,38 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.http.ResponseEntity; | ||||
| import org.springframework.web.bind.annotation.PostMapping; | ||||
| import org.springframework.web.bind.annotation.RequestBody; | ||||
| import org.springframework.web.bind.annotation.RequestHeader; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| 
 | ||||
| import java.util.Map; | ||||
| 
 | ||||
| @RestController | ||||
| public class MessageController { | ||||
| 
 | ||||
|     protected static final String PROCESSED = "Processed "; | ||||
| 
 | ||||
|     protected static final String REQUEST_MAPPING = "process"; | ||||
| 
 | ||||
|     private static final Logger LOG = LoggerFactory.getLogger(MessageController.class); | ||||
| 
 | ||||
|     /** | ||||
|      * A simple endpoint that responds with "Processed " + supplied Message content. | ||||
|      * | ||||
|      * @param headers | ||||
|      * @param message | ||||
|      * @return | ||||
|      */ | ||||
|     @PostMapping(value = REQUEST_MAPPING) | ||||
|     public ResponseEntity<String> processMessage(@RequestHeader Map<String, String> headers, | ||||
|             @RequestBody Message message) { | ||||
| 
 | ||||
|         // Print headers | ||||
|         headers.forEach((k, v) -> LOG.info(k + "=" + v)); | ||||
| 
 | ||||
|         return ResponseEntity.ok(PROCESSED + message.getText()); | ||||
|     } | ||||
| } | ||||
| @ -1,21 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.web.client.RestTemplate; | ||||
| 
 | ||||
| @Configuration | ||||
| public class RestTemplateConfiguration { | ||||
| 
 | ||||
|     /** | ||||
|      * A RestTemplate that compresses requests. | ||||
|      * | ||||
|      * @return RestTemplate | ||||
|      */ | ||||
|     @Bean | ||||
|     public RestTemplate getRestTemplate() { | ||||
|         RestTemplate restTemplate = new RestTemplate(); | ||||
|         restTemplate.getInterceptors().add(new CompressingClientHttpRequestInterceptor()); | ||||
|         return restTemplate; | ||||
|     } | ||||
| } | ||||
| @ -1,15 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.springframework.boot.SpringApplication; | ||||
| import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
| 
 | ||||
| @SpringBootApplication | ||||
| @EnableAutoConfiguration | ||||
| public class SpringCompressRequestApplication { | ||||
| 
 | ||||
|     public static void main(String[] args) { | ||||
|         SpringApplication.run(SpringCompressRequestApplication.class, args); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,19 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| 
 | ||||
| public class GzipUtilsUnitTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenCompressedText_whenDecompressed_thenSuccessful() throws Exception { | ||||
|         final String expectedText = "Hello Baeldung!"; | ||||
|         byte[] compressedText = GzipUtils.compress(expectedText); | ||||
|         String decompressedText = GzipUtils.decompress(compressedText); | ||||
|         assertNotNull(compressedText); | ||||
|         assertEquals(expectedText, decompressedText); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,56 +0,0 @@ | ||||
| package com.baeldung.spring.rest.compress; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.boot.web.server.LocalServerPort; | ||||
| import org.springframework.http.HttpEntity; | ||||
| import org.springframework.http.HttpStatus; | ||||
| import org.springframework.http.ResponseEntity; | ||||
| import org.springframework.test.context.junit4.SpringRunner; | ||||
| import org.springframework.web.client.RestTemplate; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| 
 | ||||
| @RunWith(SpringRunner.class) | ||||
| @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) | ||||
| public class MessageControllerUnitTest { | ||||
| 
 | ||||
| 	private static final Logger LOG = LoggerFactory.getLogger(MessageControllerUnitTest.class); | ||||
| 
 | ||||
| 	@Autowired | ||||
| 	private RestTemplate restTemplate; | ||||
| 
 | ||||
| 	@LocalServerPort | ||||
| 	private int randomServerPort; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * As a further test you can intercept the request body, using a tool like | ||||
| 	 * Wireshark, to see the request body is actually gzipped. | ||||
| 	 * | ||||
| 	 * @throws Exception | ||||
| 	 */ | ||||
| 	@Test | ||||
| 	public void givenRestTemplate_whenPostCompressedRequest_thenRespondsSuccessfully() throws Exception { | ||||
| 
 | ||||
| 		final String text = "Hello Baeldung!"; | ||||
| 		Message message = new Message(text); | ||||
| 
 | ||||
| 		HttpEntity<Message> request = new HttpEntity<>(message); | ||||
| 		String uri = String.format("http://localhost:%s/%s", randomServerPort, MessageController.REQUEST_MAPPING); | ||||
| 
 | ||||
| 		ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, request, String.class); | ||||
| 
 | ||||
| 		String response = responseEntity.getBody(); | ||||
| 		LOG.info("Got response [{}]", response); | ||||
| 
 | ||||
| 		assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); | ||||
| 		assertNotNull(response); | ||||
| 		assertEquals(MessageController.PROCESSED + text, response); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user