From 347a06c330f42d2c6ac494ba365fc197cc64df50 Mon Sep 17 00:00:00 2001 From: Greg Turnquist Date: Fri, 8 Mar 2019 09:21:53 -0600 Subject: [PATCH 1/2] #860 - Switch to URI.create() and toUri() to avoid checked exceptions. `URI.create()` wraps `new URI()` and converts a `UriSyntaxException` into an `IllegalArgumentException`. Also, take advantage of `toUri()`. --- .../hateoas/EmployeeController.java | 23 ++---- src/main/asciidoc/client.adoc | 8 +- .../CollectionJsonWebMvcIntegrationTest.java | 49 ++++-------- .../HalFormsValidationIntegrationTest.java | 52 +++++-------- .../MultiMediaTypeWebMvcIntegrationTest.java | 34 +++----- .../reactive/WebFluxLinkBuilderTest.java | 28 +++---- .../support/WebFluxEmployeeController.java | 77 ++++++++----------- .../support/WebMvcEmployeeController.java | 25 ++---- 8 files changed, 106 insertions(+), 190 deletions(-) diff --git a/src/docs/java/org/springframework/hateoas/EmployeeController.java b/src/docs/java/org/springframework/hateoas/EmployeeController.java index 277cf3605..6bc85aa34 100644 --- a/src/docs/java/org/springframework/hateoas/EmployeeController.java +++ b/src/docs/java/org/springframework/hateoas/EmployeeController.java @@ -17,8 +17,6 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -130,7 +128,7 @@ public ResponseEntity newEmployee(@RequestBody EntityModel employee Link link = linkTo(methodOn(getClass()).findOne(newEmployeeId)).withSelfRel().expand(); - return ResponseEntity.created(URI.create(link.getHref())).build(); + return ResponseEntity.created(link.toUri()).build(); } // end::new[] @@ -146,7 +144,7 @@ public ResponseEntity updateEmployee( // Link link = linkTo(methodOn(getClass()).findOne(id)).withSelfRel().expand(); return ResponseEntity.noContent() // - .location(URI.create(link.getHref())) // + .location(link.toUri()) // .build(); } @@ -170,18 +168,9 @@ public ResponseEntity partiallyUpdateEmployee( // EMPLOYEES.put(id, newEmployee); - try { - return ResponseEntity // - .noContent() // - .location( // - new URI(findOne(id) // - .getLink(IanaLinkRelations.SELF) // - .map(link -> link.expand().getHref()) // - .orElse("") // - ) // - ).build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity // + .noContent() // + .location(findOne(id).getRequiredLink(IanaLinkRelations.SELF).toUri()) // + .build(); } } diff --git a/src/main/asciidoc/client.adoc b/src/main/asciidoc/client.adoc index d2a55b950..a211415ba 100644 --- a/src/main/asciidoc/client.adoc +++ b/src/main/asciidoc/client.adoc @@ -15,10 +15,10 @@ The following example shows how to use it: Map parameters = new HashMap<>(); parameters.put("user", 27); -Traverson traverson = new Traverson(new URI("http://localhost:8080/api/"), MediaTypes.HAL_JSON); -String name = traverson.follow("movies", "movie", "actor"). - withTemplateParameters(parameters). - toObject("$.name"); +Traverson traverson = new Traverson(URI.create("http://localhost:8080/api/"), MediaTypes.HAL_JSON); +String name = traverson + .follow("movies", "movie", "actor").withTemplateParameters(parameters) + .toObject("$.name"); ---- ==== diff --git a/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java b/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java index 355114522..f8e772bec 100644 --- a/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java @@ -22,8 +22,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -37,11 +35,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.IanaLinkRelations; import org.springframework.hateoas.Link; import org.springframework.hateoas.MediaTypes; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.config.EnableHypermediaSupport; import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; import org.springframework.hateoas.support.Employee; @@ -267,15 +265,10 @@ public ResponseEntity newEmployee(@RequestBody EntityModel employee EMPLOYEES.put(newEmployeeId, employee.getContent()); - try { - return ResponseEntity.created(new URI(findOne(newEmployeeId) // - .getLink(IanaLinkRelations.SELF.value()) // - .map(link -> link.expand().getHref()) // - .orElse(""))) // - .build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity.created(findOne(newEmployeeId) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build(); } @PutMapping("/employees/{id}") @@ -283,16 +276,11 @@ public ResponseEntity updateEmployee(@RequestBody EntityModel emplo EMPLOYEES.put(id, employee.getContent()); - try { - return ResponseEntity.noContent() // - .location(new URI(findOne(id) // - .getLink(IanaLinkRelations.SELF.value()) // - .map(link -> link.expand().getHref()) // - .orElse(""))) // - .build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity.noContent() // + .location(findOne(id) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build(); } @PatchMapping("/employees/{id}") @@ -312,16 +300,11 @@ public ResponseEntity partiallyUpdateEmployee(@RequestBody EntityModel link.expand().getHref()) // - .orElse(""))) // - .build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity.noContent() // + .location(findOne(id) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build(); } } diff --git a/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java b/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java index 490af35e8..95ac75373 100644 --- a/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java @@ -22,8 +22,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -35,11 +33,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.IanaLinkRelations; import org.springframework.hateoas.Link; import org.springframework.hateoas.MediaTypes; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.config.EnableHypermediaSupport; import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; import org.springframework.hateoas.support.Employee; @@ -155,12 +153,11 @@ public ResponseEntity newEmployee(@RequestBody Employee employee) { EMPLOYEES.put(newEmployeeId, employee); - try { - return ResponseEntity.noContent().location(new URI(findOne(newEmployeeId).getLink(IanaLinkRelations.SELF.value()) - .map(link -> link.expand().getHref()).orElse(""))).build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity.noContent() // + .location(findOne(newEmployeeId) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build(); } @PutMapping("/employees/{id}") @@ -168,17 +165,12 @@ public ResponseEntity updateEmployee(@RequestBody Employee employee, @PathVar EMPLOYEES.put(id, employee); - try { - return ResponseEntity // - .noContent() // - .location( // - new URI(findOne(id).getLink(IanaLinkRelations.SELF.value()) // - .map(link -> link.expand().getHref()) // - .orElse("")) // - ).build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity // + .noContent() // + .location(findOne(id) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build(); } @PatchMapping("/employees/{id}") @@ -196,18 +188,12 @@ public ResponseEntity partiallyUpdateEmployee(@RequestBody Employee employee, EMPLOYEES.put(id, newEmployee); - try { - return ResponseEntity // - .noContent() // - .location( // - new URI(findOne(id) // - .getLink(IanaLinkRelations.SELF.value()) // - .map(link -> link.expand().getHref()) // - .orElse(""))) // - .build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity // + .noContent() // + .location(findOne(id) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build(); } } diff --git a/src/test/java/org/springframework/hateoas/server/mvc/MultiMediaTypeWebMvcIntegrationTest.java b/src/test/java/org/springframework/hateoas/server/mvc/MultiMediaTypeWebMvcIntegrationTest.java index b878f4ca5..09062577c 100644 --- a/src/test/java/org/springframework/hateoas/server/mvc/MultiMediaTypeWebMvcIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/server/mvc/MultiMediaTypeWebMvcIntegrationTest.java @@ -23,7 +23,6 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -37,11 +36,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.IanaLinkRelations; import org.springframework.hateoas.Link; import org.springframework.hateoas.MediaTypes; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.config.EnableHypermediaSupport; import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; import org.springframework.hateoas.mediatype.collectionjson.CollectionJsonLinkDiscoverer; @@ -507,11 +506,7 @@ public ResponseEntity newEmployee(@RequestBody EntityModel employee EMPLOYEES.put(newEmployeeId, employee.getContent()); - try { - return ResponseEntity.created(toUri(newEmployeeId)).build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity.created(toUri(newEmployeeId)).build(); } @PutMapping("/employees/{id}") @@ -519,11 +514,7 @@ public ResponseEntity updateEmployee(@RequestBody EntityModel emplo EMPLOYEES.put(id, employee.getContent()); - try { - return ResponseEntity.noContent().location(toUri(id)).build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity.noContent().location(toUri(id)).build(); } @PatchMapping("/employees/{id}") @@ -542,21 +533,14 @@ public ResponseEntity partiallyUpdateEmployee(@RequestBody EntityModel link.expand().getHref()) // - .orElse(""); + private URI toUri(Integer id) { - return new URI(uri); + return findOne(id) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri(); } } diff --git a/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java b/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java index f85f28728..fea78f568 100644 --- a/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java +++ b/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java @@ -55,10 +55,10 @@ public class WebFluxLinkBuilderTest { * @see #728 */ @Test - public void linkAtSameLevelAsExplicitServerExchangeShouldWork() throws URISyntaxException { + public void linkAtSameLevelAsExplicitServerExchangeShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/api")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/api")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController.class).root(), this.exchange).withSelfRel().toMono() // @@ -76,10 +76,10 @@ public void linkAtSameLevelAsExplicitServerExchangeShouldWork() throws URISyntax * @see #728 */ @Test - public void linkAtSameLevelAsContextProvidedServerExchangeShouldWork() throws URISyntaxException { + public void linkAtSameLevelAsContextProvidedServerExchangeShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/api")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/api")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController.class).root()).withSelfRel().toMono() // @@ -97,11 +97,11 @@ public void linkAtSameLevelAsContextProvidedServerExchangeShouldWork() throws UR * @see #728 */ @Test - public void shallowLinkFromDeepExplicitServerExchangeShouldWork() throws URISyntaxException { + public void shallowLinkFromDeepExplicitServerExchangeShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/api/employees")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/api/employees")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController.class).root(), this.exchange).withSelfRel().toMono() // @@ -120,10 +120,10 @@ public void shallowLinkFromDeepExplicitServerExchangeShouldWork() throws URISynt * @see #728 */ @Test - public void shallowLinkFromDeepContextProvidedServerExchangeShouldWork() throws URISyntaxException { + public void shallowLinkFromDeepContextProvidedServerExchangeShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/api/employees")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/api/employees")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController.class).root()).withSelfRel().toMono() // @@ -142,10 +142,10 @@ public void shallowLinkFromDeepContextProvidedServerExchangeShouldWork() throws * @see #728 */ @Test - public void deepLinkFromShallowExplicitServerExchangeShouldWork() throws URISyntaxException { + public void deepLinkFromShallowExplicitServerExchangeShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/api")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/api")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController.class).deep(), this.exchange).withSelfRel().toMono() // @@ -163,10 +163,10 @@ public void deepLinkFromShallowExplicitServerExchangeShouldWork() throws URISynt * @see #728 */ @Test - public void deepLinkFromShallowContextProvidedServerExchangeShouldWork() throws URISyntaxException { + public void deepLinkFromShallowContextProvidedServerExchangeShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/api")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/api")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController.class).deep()).withSelfRel().toMono() // @@ -185,10 +185,10 @@ public void deepLinkFromShallowContextProvidedServerExchangeShouldWork() throws * @see #728 */ @Test - public void linkToRouteWithNoMappingShouldWork() throws URISyntaxException { + public void linkToRouteWithNoMappingShouldWork() { when(this.exchange.getRequest()).thenReturn(this.request); - when(this.request.getURI()).thenReturn(new URI("http://localhost:8080/")); + when(this.request.getURI()).thenReturn(URI.create("http://localhost:8080/")); when(this.request.getHeaders()).thenReturn(new HttpHeaders()); linkTo(methodOn(TestController2.class).root()).withSelfRel().toMono() // diff --git a/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java b/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java index 43d8387e4..955627dd0 100644 --- a/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java +++ b/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java @@ -18,14 +18,12 @@ import static org.springframework.hateoas.server.reactive.WebFluxLinkBuilder.*; import static reactor.function.TupleUtils.*; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import java.net.URI; import java.util.Map; import java.util.Optional; import java.util.TreeMap; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import org.springframework.hateoas.Affordance; import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; @@ -128,20 +126,17 @@ public Mono> findOne(@PathVariable Integer id) { @PostMapping("/employees") public Mono> newEmployee(@RequestBody Mono> employee) { - return employee.flatMap(resource -> { - - int newEmployeeId = EMPLOYEES.size(); - EMPLOYEES.put(newEmployeeId, resource.getContent()); - return findOne(newEmployeeId); - - }).map(findOne -> { - - return ResponseEntity.created(URI.create(findOne // - .getLink(IanaLinkRelations.SELF) // - .map(link -> link.expand().getHref()) // - .orElse(""))) // - .build(); - }); + return employee // + .flatMap(resource -> { + + int newEmployeeId = EMPLOYEES.size(); + EMPLOYEES.put(newEmployeeId, resource.getContent()); + return findOne(newEmployeeId); + }) // + .map(findOne -> ResponseEntity.created(findOne // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) // + .build()); } @PutMapping("/employees/{id}") @@ -151,46 +146,34 @@ public Mono> updateEmployee(@RequestBody Mono { EMPLOYEES.put(id, resource.getContent()); return findOne(id); - }).map(findOne -> { - - return ResponseEntity.noContent() // - .location(URI.create(findOne // - .getLink(IanaLinkRelations.SELF) // - .map(link -> link.expand().getHref()) // - .orElse(""))) // - .build(); - }); + }).map(findOne -> ResponseEntity.noContent() // + .location(findOne.getRequiredLink(IanaLinkRelations.SELF).toUri()).build()); } @PatchMapping("/employees/{id}") public Mono> partiallyUpdateEmployee( // @RequestBody Mono> employee, @PathVariable Integer id) { - return employee.flatMap(resource -> { - - Employee oldEmployee = EMPLOYEES.get(id); - Employee newEmployee = oldEmployee; + return employee // + .flatMap(resource -> { - if (resource.getContent().getName() != null) { - newEmployee = newEmployee.withName(resource.getContent().getName()); - } + Employee oldEmployee = EMPLOYEES.get(id); + Employee newEmployee = oldEmployee; - if (resource.getContent().getRole() != null) { - newEmployee = newEmployee.withRole(resource.getContent().getRole()); - } + if (resource.getContent().getName() != null) { + newEmployee = newEmployee.withName(resource.getContent().getName()); + } - EMPLOYEES.put(id, newEmployee); + if (resource.getContent().getRole() != null) { + newEmployee = newEmployee.withRole(resource.getContent().getRole()); + } - return findOne(id); + EMPLOYEES.put(id, newEmployee); - }).map(findOne -> { + return findOne(id); - return ResponseEntity.noContent() // - .location(URI.create(findOne // - .getLink(IanaLinkRelations.SELF) // - .map(link -> link.expand().getHref()) // - .orElse(""))) // - .build(); - }); + }) // + .map(findOne -> ResponseEntity.noContent() // + .location(findOne.getRequiredLink(IanaLinkRelations.SELF).toUri()).build()); } } diff --git a/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java b/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java index 2ece71d69..2bdf131b2 100644 --- a/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java +++ b/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java @@ -17,8 +17,6 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -138,7 +136,7 @@ public ResponseEntity newEmployee(@RequestBody EntityModel employee Link link = linkTo(methodOn(getClass()).findOne(newEmployeeId)).withSelfRel().expand(); - return ResponseEntity.created(URI.create(link.getHref())).build(); + return ResponseEntity.created(link.toUri()).build(); } @PutMapping("/employees/{id}") @@ -149,7 +147,7 @@ public ResponseEntity updateEmployee(@RequestBody EntityModel emplo Link link = linkTo(methodOn(getClass()).findOne(id)).withSelfRel().expand(); return ResponseEntity.noContent() // - .location(URI.create(link.getHref())) // + .location(link.toUri()) // .build(); } @@ -170,18 +168,11 @@ public ResponseEntity partiallyUpdateEmployee(@RequestBody EntityModel link.expand().getHref()) // - .orElse("") // - ) // - ).build(); - } catch (URISyntaxException e) { - return ResponseEntity.badRequest().body(e.getMessage()); - } + return ResponseEntity // + .noContent() // + .location(findOne(id) // + .getRequiredLink(IanaLinkRelations.SELF) // + .toUri()) + .build(); } } From 5d41903079c2751c29bd9f9f720222e6aa567f6d Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 12 Mar 2019 08:21:37 +0100 Subject: [PATCH 2/2] #860 - Polishing. Removed some superfluous variables. Replaces Hamcrest with AssertJ. Formatting. --- .../hateoas/EmployeeController.java | 3 +- .../CollectionJsonWebMvcIntegrationTest.java | 3 +- .../HalFormsValidationIntegrationTest.java | 13 ++++---- .../reactive/WebFluxLinkBuilderTest.java | 4 +-- .../support/WebFluxEmployeeController.java | 32 +++++++++---------- .../support/WebMvcEmployeeController.java | 5 ++- 6 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/docs/java/org/springframework/hateoas/EmployeeController.java b/src/docs/java/org/springframework/hateoas/EmployeeController.java index 6bc85aa34..0d32d49d4 100644 --- a/src/docs/java/org/springframework/hateoas/EmployeeController.java +++ b/src/docs/java/org/springframework/hateoas/EmployeeController.java @@ -155,8 +155,7 @@ public ResponseEntity partiallyUpdateEmployee( // // end::patch[] { - Employee oldEmployee = EMPLOYEES.get(id); - Employee newEmployee = oldEmployee; + Employee newEmployee = EMPLOYEES.get(id); if (employee.getContent().getName() != null) { newEmployee = newEmployee.withName(employee.getContent().getName()); diff --git a/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java b/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java index f8e772bec..e17eec12c 100644 --- a/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/collectionjson/CollectionJsonWebMvcIntegrationTest.java @@ -287,8 +287,7 @@ public ResponseEntity updateEmployee(@RequestBody EntityModel emplo public ResponseEntity partiallyUpdateEmployee(@RequestBody EntityModel employee, @PathVariable Integer id) { - Employee oldEmployee = EMPLOYEES.get(id); - Employee newEmployee = oldEmployee; + Employee newEmployee = EMPLOYEES.get(id); if (employee.getContent().getName() != null) { newEmployee = newEmployee.withName(employee.getContent().getName()); diff --git a/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java b/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java index 95ac75373..f02f88d0d 100644 --- a/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsValidationIntegrationTest.java @@ -15,8 +15,7 @@ */ package org.springframework.hateoas.mediatype.hal.forms; -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.*; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -84,8 +83,9 @@ public void singleEmployee() throws Exception { .andReturn() // .getResolvedException(); - assertThat(exception.getMessage(), containsString("Affordance's URI http://localhost/employees")); - assertThat(exception.getMessage(), containsString("doesn't match self link http://localhost/employees/0")); + assertThat(exception).isNotNull(); + assertThat(exception.getMessage()).contains("Affordance's URI http://localhost/employees"); + assertThat(exception.getMessage()).contains("doesn't match self link http://localhost/employees/0"); } @Test @@ -95,8 +95,9 @@ public void collectionOfEmployees() throws Exception { .andExpect(status().is5xxServerError()) // .andReturn().getResolvedException(); - assertThat(exception.getMessage(), containsString("Affordance's URI http://localhost/employees/0")); - assertThat(exception.getMessage(), containsString("doesn't match self link http://localhost/employees")); + assertThat(exception).isNotNull(); + assertThat(exception.getMessage()).contains("Affordance's URI http://localhost/employees/0"); + assertThat(exception.getMessage()).contains("doesn't match self link http://localhost/employees"); } /** diff --git a/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java b/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java index fea78f568..511e745bd 100644 --- a/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java +++ b/src/test/java/org/springframework/hateoas/server/reactive/WebFluxLinkBuilderTest.java @@ -207,7 +207,7 @@ public void linkToRouteWithNoMappingShouldWork() { * @see #728 */ @Test - public void linkToRouteWithNoExchangeInTheContextShouldFallbackToRelativeUris() throws URISyntaxException { + public void linkToRouteWithNoExchangeInTheContextShouldFallbackToRelativeUris() { linkTo(methodOn(TestController2.class).root()).withSelfRel().toMono() // .as(StepVerifier::create).expectNextMatches(link -> { @@ -224,7 +224,7 @@ public void linkToRouteWithNoExchangeInTheContextShouldFallbackToRelativeUris() * @see #728 */ @Test - public void linkToRouteWithExplictExchangeBeingNullShouldFallbackToRelativeUris() throws URISyntaxException { + public void linkToRouteWithExplictExchangeBeingNullShouldFallbackToRelativeUris() { linkTo(methodOn(TestController2.class).root(), null).withSelfRel().toMono() // .as(StepVerifier::create).expectNextMatches(link -> { diff --git a/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java b/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java index 955627dd0..a95b70641 100644 --- a/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java +++ b/src/test/java/org/springframework/hateoas/support/WebFluxEmployeeController.java @@ -66,7 +66,7 @@ public Mono>> all() { WebFluxEmployeeController controller = methodOn(WebFluxEmployeeController.class); return Flux.fromIterable(EMPLOYEES.keySet()) // - .flatMap(id -> findOne(id)) // + .flatMap(this::findOne) // .collectList() // .flatMap(resources -> linkTo(controller.all()).withSelfRel() // .andAffordance(controller.newEmployee(null)) // @@ -83,7 +83,7 @@ public Mono>> search( // WebFluxEmployeeController controller = methodOn(WebFluxEmployeeController.class); return Flux.fromIterable(EMPLOYEES.keySet()) // - .flatMap(id -> findOne(id)) // + .flatMap(this::findOne) // .filter(resource -> { boolean nameMatches = name // @@ -94,13 +94,12 @@ public Mono>> search( // .orElse(true); return nameMatches && roleMatches; - }).collectList().flatMap(resources -> { - return linkTo(controller.all()).withSelfRel() // - .andAffordance(controller.newEmployee(null)) // - .andAffordance(controller.search(null, null)) // - .toMono() // - .map(selfLink -> new CollectionModel<>(resources, selfLink)); - }); + }).collectList().flatMap(resources -> linkTo(controller.all()) // + .withSelfRel() // + .andAffordance(controller.newEmployee(null)) // + .andAffordance(controller.search(null, null)) // + .toMono() // + .map(selfLink -> new CollectionModel<>(resources, selfLink))); } @GetMapping("/employees/{id}") @@ -118,9 +117,7 @@ public Mono> findOne(@PathVariable Integer id) { return selfLink.zipWith(employeesLink) // .map(function((left, right) -> Links.of(left, right))) // - .map(links -> { - return new EntityModel<>(EMPLOYEES.get(id), links); - }); + .map(links -> new EntityModel<>(EMPLOYEES.get(id), links)); } @PostMapping("/employees") @@ -144,6 +141,7 @@ public Mono> updateEmployee(@RequestBody Mono { + EMPLOYEES.put(id, resource.getContent()); return findOne(id); }).map(findOne -> ResponseEntity.noContent() // @@ -157,8 +155,7 @@ public Mono> partiallyUpdateEmployee( // return employee // .flatMap(resource -> { - Employee oldEmployee = EMPLOYEES.get(id); - Employee newEmployee = oldEmployee; + Employee newEmployee = EMPLOYEES.get(id); if (resource.getContent().getName() != null) { newEmployee = newEmployee.withName(resource.getContent().getName()); @@ -172,8 +169,9 @@ public Mono> partiallyUpdateEmployee( // return findOne(id); - }) // - .map(findOne -> ResponseEntity.noContent() // - .location(findOne.getRequiredLink(IanaLinkRelations.SELF).toUri()).build()); + }).map(findOne -> ResponseEntity.noContent() // + .location(findOne.getRequiredLink(IanaLinkRelations.SELF).toUri()) // + .build() // + ); } } diff --git a/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java b/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java index 2bdf131b2..4ce556c85 100644 --- a/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java +++ b/src/test/java/org/springframework/hateoas/support/WebMvcEmployeeController.java @@ -155,8 +155,7 @@ public ResponseEntity updateEmployee(@RequestBody EntityModel emplo public ResponseEntity partiallyUpdateEmployee(@RequestBody EntityModel employee, @PathVariable Integer id) { - Employee oldEmployee = EMPLOYEES.get(id); - Employee newEmployee = oldEmployee; + Employee newEmployee = EMPLOYEES.get(id); if (employee.getContent().getName() != null) { newEmployee = newEmployee.withName(employee.getContent().getName()); @@ -172,7 +171,7 @@ public ResponseEntity partiallyUpdateEmployee(@RequestBody EntityModel