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;
+ }
+
+}