small fixes to match articles

This commit is contained in:
Loredana 2019-03-17 12:26:00 +02:00
parent b7c1092460
commit f62a8d0f70
15 changed files with 51 additions and 45 deletions

View File

@ -1,11 +1,13 @@
package com.baeldung; package com.baeldung;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication @SpringBootApplication
public class SpringBootRestApplication { public class SpringBootRestApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(SpringBootRestApplication.class, args); SpringApplication.run(SpringBootRestApplication.class, args);
} }

View File

@ -9,7 +9,7 @@ public interface IOperations<T extends Serializable> {
// read - one // read - one
T findOne(final long id); T findById(final long id);
// read - all // read - all

View File

@ -18,9 +18,8 @@ public abstract class AbstractService<T extends Serializable> implements IOperat
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public T findOne(final long id) { public T findById(final long id) {
return getDao().findById(id) return getDao().findById(id).orElse(null);
.get();
} }
// read - all // read - all

View File

@ -55,7 +55,7 @@ public class WebConfig implements WebMvcConfigurer {
@Bean @Bean
public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() { public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() {
FilterRegistrationBean<ShallowEtagHeaderFilter> filterRegistrationBean = new FilterRegistrationBean<>( new ShallowEtagHeaderFilter()); FilterRegistrationBean<ShallowEtagHeaderFilter> filterRegistrationBean = new FilterRegistrationBean<>( new ShallowEtagHeaderFilter());
filterRegistrationBean.addUrlPatterns("/auth/foos/*"); filterRegistrationBean.addUrlPatterns("/foos/*");
filterRegistrationBean.setName("etagFilter"); filterRegistrationBean.setName("etagFilter");
return filterRegistrationBean; return filterRegistrationBean;
} }

View File

@ -5,6 +5,7 @@ import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import com.baeldung.persistence.model.Foo; import com.baeldung.persistence.model.Foo;
@ -32,7 +34,7 @@ import com.baeldung.web.util.RestPreconditions;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
@RestController @RestController
@RequestMapping(value = "/auth/foos") @RequestMapping(value = "/foos")
public class FooController { public class FooController {
@Autowired @Autowired
@ -41,6 +43,10 @@ public class FooController {
@Autowired @Autowired
private IFooService service; private IFooService service;
@Value("${version}")
Integer version;
public FooController() { public FooController() {
super(); super();
} }
@ -51,28 +57,36 @@ public class FooController {
@GetMapping(value = "/{id}/custom-etag") @GetMapping(value = "/{id}/custom-etag")
public ResponseEntity<Foo> findByIdWithCustomEtag(@PathVariable("id") final Long id, public ResponseEntity<Foo> findByIdWithCustomEtag(@PathVariable("id") final Long id,
final HttpServletResponse response) { final HttpServletResponse response) {
final Foo resourceById = RestPreconditions.checkFound(service.findOne(id)); final Foo foo = RestPreconditions.checkFound(service.findById(id));
eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response)); eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
return ResponseEntity.ok() return ResponseEntity.ok()
.eTag(Long.toString(resourceById.getVersion())) .eTag(Long.toString(foo.getVersion()))
.body(resourceById); .body(foo);
} }
// read - one // read - one
@GetMapping(value = "/{id}") @GetMapping(value = "/{id}")
public Foo findById(@PathVariable("id") final Long id, final HttpServletResponse response) { public Foo findById(@PathVariable("id") final Long id, final HttpServletResponse response) {
final Foo resourceById = RestPreconditions.checkFound(service.findOne(id)); try {
final Foo resourceById = RestPreconditions.checkFound(service.findById(id));
eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
return resourceById;
}
catch (MyResourceNotFoundException exc) {
throw new ResponseStatusException(
HttpStatus.NOT_FOUND, "Foo Not Found", exc);
}
eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
return resourceById;
} }
// read - all // read - all
@GetMapping @GetMapping
public List<Foo> findAll() { public List<Foo> findAll() {
System.out.println(version);
return service.findAll(); return service.findAll();
} }
@ -120,7 +134,7 @@ public class FooController {
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public void update(@PathVariable("id") final Long id, @RequestBody final Foo resource) { public void update(@PathVariable("id") final Long id, @RequestBody final Foo resource) {
Preconditions.checkNotNull(resource); Preconditions.checkNotNull(resource);
RestPreconditions.checkFound(service.findOne(resource.getId())); RestPreconditions.checkFound(service.findById(resource.getId()));
service.update(resource); service.update(resource);
} }

View File

@ -7,34 +7,28 @@ import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.util.UriTemplate; import org.springframework.web.util.UriTemplate;
import com.baeldung.web.util.LinkUtil; import com.baeldung.web.util.LinkUtil;
@Controller @Controller
@RequestMapping(value = "/auth/")
public class RootController { public class RootController {
public RootController() {
super();
}
// API // API
// discover // discover
@RequestMapping(value = "admin", method = RequestMethod.GET) @GetMapping("/")
@ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseStatus(value = HttpStatus.NO_CONTENT)
public void adminRoot(final HttpServletRequest request, final HttpServletResponse response) { public void adminRoot(final HttpServletRequest request, final HttpServletResponse response) {
final String rootUri = request.getRequestURL() final String rootUri = request.getRequestURL()
.toString(); .toString();
final URI fooUri = new UriTemplate("{rootUri}/{resource}").expand(rootUri, "foo"); final URI fooUri = new UriTemplate("{rootUri}{resource}").expand(rootUri, "foos");
final String linkToFoo = LinkUtil.createLinkHeader(fooUri.toASCIIString(), "collection"); final String linkToFoos = LinkUtil.createLinkHeader(fooUri.toASCIIString(), "collection");
response.addHeader("Link", linkToFoo); response.addHeader("Link", linkToFoos);
} }
} }

View File

@ -115,7 +115,7 @@ class PaginatedResultsRetrievedDiscoverabilityListener implements ApplicationLis
protected void plural(final UriComponentsBuilder uriBuilder, final Class clazz) { protected void plural(final UriComponentsBuilder uriBuilder, final Class clazz) {
final String resourceName = clazz.getSimpleName() final String resourceName = clazz.getSimpleName()
.toLowerCase() + "s"; .toLowerCase() + "s";
uriBuilder.path("/auth/" + resourceName); uriBuilder.path("/" + resourceName);
} }
} }

View File

@ -1,6 +1,7 @@
server.port=8082
server.servlet.context-path=/spring-boot-rest server.servlet.context-path=/spring-boot-rest
### Spring Boot default error handling configurations ### Spring Boot default error handling configurations
#server.error.whitelabel.enabled=false #server.error.whitelabel.enabled=false
#server.error.include-stacktrace=always #server.error.include-stacktrace=always
version=1

View File

@ -1,5 +1,5 @@
package com.baeldung; package com.baeldung;
public interface Consts { public interface Consts {
int APPLICATION_PORT = 8082; int APPLICATION_PORT = 8080;
} }

View File

@ -59,7 +59,7 @@ public abstract class AbstractLiveTest<T extends Serializable> {
// //
protected String getURL() { protected String getURL() {
return "http://localhost:" + APPLICATION_PORT + "/spring-boot-rest/auth/foos"; return "http://localhost:" + APPLICATION_PORT + "/spring-boot-rest/foos";
} }
} }

View File

@ -27,7 +27,7 @@ public class FooControllerAppIntegrationTest {
@Test @Test
public void whenFindPaginatedRequest_thenEmptyResponse() throws Exception { public void whenFindPaginatedRequest_thenEmptyResponse() throws Exception {
this.mockMvc.perform(get("/auth/foos").param("page", "0") this.mockMvc.perform(get("/foos").param("page", "0")
.param("size", "2")) .param("size", "2"))
.andExpect(status().isOk()) .andExpect(status().isOk())
.andExpect(content().json("[]")); .andExpect(content().json("[]"));

View File

@ -29,7 +29,7 @@ public class FooControllerCustomEtagIntegrationTest {
@Autowired @Autowired
private MockMvc mvc; private MockMvc mvc;
private String FOOS_ENDPOINT = "/auth/foos/"; private String FOOS_ENDPOINT = "/foos/";
private String CUSTOM_ETAG_ENDPOINT_SUFFIX = "/custom-etag"; private String CUSTOM_ETAG_ENDPOINT_SUFFIX = "/custom-etag";
private static String serializeFoo(Foo foo) throws Exception { private static String serializeFoo(Foo foo) throws Exception {

View File

@ -51,7 +51,7 @@ public class FooControllerWebLayerIntegrationTest {
doNothing().when(publisher) doNothing().when(publisher)
.publishEvent(any(PaginatedResultsRetrievedEvent.class)); .publishEvent(any(PaginatedResultsRetrievedEvent.class));
this.mockMvc.perform(get("/auth/foos").param("page", "0") this.mockMvc.perform(get("/foos").param("page", "0")
.param("size", "2")) .param("size", "2"))
.andExpect(status().isOk()) .andExpect(status().isOk())
.andExpect(jsonPath("$",Matchers.hasSize(1))); .andExpect(jsonPath("$",Matchers.hasSize(1)));

View File

@ -74,7 +74,7 @@ public class FooPageableLiveTest extends AbstractBasicLiveTest<Foo> {
} }
protected String getPageableURL() { protected String getPageableURL() {
return "http://localhost:" + APPLICATION_PORT + "/spring-boot-rest/auth/foos/pageable"; return "http://localhost:" + APPLICATION_PORT + "/spring-boot-rest/foos/pageable";
} }
} }

View File

@ -42,15 +42,14 @@
"raw": "{\n \"name\": \"Transformers\"\n}" "raw": "{\n \"name\": \"Transformers\"\n}"
}, },
"url": { "url": {
"raw": "http://localhost:8082/spring-boot-rest/auth/foos", "raw": "http://localhost:8080/spring-boot-rest/foos",
"protocol": "http", "protocol": "http",
"host": [ "host": [
"localhost" "localhost"
], ],
"port": "8082", "port": "8080",
"path": [ "path": [
"spring-boot-rest", "spring-boot-rest",
"auth",
"foos" "foos"
] ]
} }
@ -85,15 +84,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8082/spring-boot-rest/auth/foos/{{id}}", "raw": "http://localhost:8080/spring-boot-rest/foos/{{id}}",
"protocol": "http", "protocol": "http",
"host": [ "host": [
"localhost" "localhost"
], ],
"port": "8082", "port": "8080",
"path": [ "path": [
"spring-boot-rest", "spring-boot-rest",
"auth",
"foos", "foos",
"{{id}}" "{{id}}"
] ]
@ -123,15 +121,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8082/spring-boot-rest/auth/foos/{{id}}", "raw": "http://localhost:8080/spring-boot-rest/foos/{{id}}",
"protocol": "http", "protocol": "http",
"host": [ "host": [
"localhost" "localhost"
], ],
"port": "8082", "port": "8080",
"path": [ "path": [
"spring-boot-rest", "spring-boot-rest",
"auth",
"foos", "foos",
"{{id}}" "{{id}}"
] ]
@ -164,15 +161,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "http://localhost:8082/spring-boot-rest/auth/foos/{{id}}", "raw": "http://localhost:8080/spring-boot-rest/foos/{{id}}",
"protocol": "http", "protocol": "http",
"host": [ "host": [
"localhost" "localhost"
], ],
"port": "8082", "port": "8080",
"path": [ "path": [
"spring-boot-rest", "spring-boot-rest",
"auth",
"foos", "foos",
"{{id}}" "{{id}}"
] ]