diff --git a/spring-security-rest/.settings/org.eclipse.jdt.core.prefs b/spring-security-rest/.settings/org.eclipse.jdt.core.prefs index 723e5b1245..df81356514 100644 --- a/spring-security-rest/.settings/org.eclipse.jdt.core.prefs +++ b/spring-security-rest/.settings/org.eclipse.jdt.core.prefs @@ -42,7 +42,7 @@ org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 9b5cfbdace..8c41c2fece 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -88,6 +88,14 @@ runtime + + + + com.google.guava + guava + 14.0.1 + + diff --git a/spring-security-rest/src/main/java/org/baeldung/persistence/service/FooService.java b/spring-security-rest/src/main/java/org/baeldung/persistence/service/FooService.java new file mode 100644 index 0000000000..02db7a733a --- /dev/null +++ b/spring-security-rest/src/main/java/org/baeldung/persistence/service/FooService.java @@ -0,0 +1,23 @@ +package org.baeldung.persistence.service; + +import org.baeldung.web.dto.Foo; +import org.springframework.stereotype.Service; + +@Service +public class FooService { + + public FooService() { + super(); + } + + // API + + public Foo getById(final Long id) { + return null; + } + + public Long create(final Foo resource) { + return null; + } + +} diff --git a/spring-security-rest/src/main/java/org/baeldung/spring/config/PersistenceConfig.java b/spring-security-rest/src/main/java/org/baeldung/spring/config/PersistenceConfig.java new file mode 100644 index 0000000000..913c5d26ce --- /dev/null +++ b/spring-security-rest/src/main/java/org/baeldung/spring/config/PersistenceConfig.java @@ -0,0 +1,14 @@ +package org.baeldung.spring.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("org.baeldung.persistence") +public class PersistenceConfig { + + public PersistenceConfig() { + super(); + } + +} diff --git a/spring-security-rest/src/main/java/org/baeldung/web/controller/FooController.java b/spring-security-rest/src/main/java/org/baeldung/web/controller/FooController.java index e4507df59c..ce3b59e825 100644 --- a/spring-security-rest/src/main/java/org/baeldung/web/controller/FooController.java +++ b/spring-security-rest/src/main/java/org/baeldung/web/controller/FooController.java @@ -1,8 +1,50 @@ package org.baeldung.web.controller; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.baeldung.persistence.service.FooService; +import org.baeldung.web.dto.Foo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.google.common.base.Preconditions; @Controller public class FooController { - // + + @Autowired + private FooService service; + + @Autowired + private ApplicationEventPublisher eventPublisher; + + // API + + @RequestMapping(value = "admin/foo/{id}", method = RequestMethod.GET) + @ResponseBody + public Foo get(@PathVariable("id") final Long id, final HttpServletRequest request, final HttpServletResponse response) { + final Foo resourceById = Preconditions.checkNotNull(service.getById(id)); + + eventPublisher.publishEvent(new SingleResourceRetrieved(this, request, response)); + return resourceById; + } + + @RequestMapping(value = "admin/foo", method = RequestMethod.POST) + @ResponseStatus(HttpStatus.CREATED) + public void create(@RequestBody final Foo resource, final HttpServletRequest request, final HttpServletResponse response) { + Preconditions.checkNotNull(resource); + final Long idOfCreatedResource = service.create(resource); + + eventPublisher.publishEvent(new ResourceCreated(this, request, response, idOfCreatedResource)); + } + } diff --git a/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java b/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java new file mode 100644 index 0000000000..9baa0e2df8 --- /dev/null +++ b/spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java @@ -0,0 +1,35 @@ +package org.baeldung.web.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.context.ApplicationEvent; + +public class ResourceCreated extends ApplicationEvent { + private final HttpServletResponse response; + private final HttpServletRequest request; + private final long idOfCreatedResource; + + public ResourceCreated(final Object source, final HttpServletRequest request, final HttpServletResponse response, final long idOfCreatedResource) { + super(source); + + this.request = request; + this.response = response; + this.idOfCreatedResource = idOfCreatedResource; + } + + // API + + public HttpServletResponse getResponse() { + return response; + } + + public HttpServletRequest getRequest() { + return request; + } + + public long getIdOfCreatedResource() { + return idOfCreatedResource; + } + +} diff --git a/spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrieved.java b/spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrieved.java new file mode 100644 index 0000000000..3de7918105 --- /dev/null +++ b/spring-security-rest/src/main/java/org/baeldung/web/controller/SingleResourceRetrieved.java @@ -0,0 +1,29 @@ +package org.baeldung.web.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.context.ApplicationEvent; + +public class SingleResourceRetrieved extends ApplicationEvent { + private final HttpServletResponse response; + private final HttpServletRequest request; + + public SingleResourceRetrieved(final Object source, final HttpServletRequest request, final HttpServletResponse response) { + super(source); + + this.request = request; + this.response = response; + } + + // API + + public HttpServletResponse getResponse() { + return response; + } + + public HttpServletRequest getRequest() { + return request; + } + +}