Explicitly return NO CONTENT type response for http DELETE request

Change-Id: I920084b92197bb1687e7d978ad350b2e1290ecbc
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
index 8d0bc3e..5c63035 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
@@ -104,16 +104,15 @@
      * Uninstalls the specified application deactivating it first if necessary.
      *
      * @param name application name
-     * @return 200 OK; 404; 401
+     * @return 204 NO CONTENT
      */
     @DELETE
-    @Produces(MediaType.APPLICATION_JSON)
     @Path("{name}")
     public Response uninstallApp(@PathParam("name") String name) {
         ApplicationAdminService service = get(ApplicationAdminService.class);
         ApplicationId appId = service.getId(name);
         service.uninstall(appId);
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     /**
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
index 0002c3a..cc57581 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
@@ -20,11 +20,13 @@
 import org.onosproject.cfg.ConfigProperty;
 import org.onosproject.rest.AbstractWebResource;
 
+import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.io.InputStream;
@@ -87,6 +89,7 @@
      * @throws IOException to signify bad request
      */
     @POST
+    @Consumes(MediaType.APPLICATION_JSON)
     @Path("{component}")
     public Response setConfigs(@PathParam("component") String component,
                                InputStream request) throws IOException {
@@ -103,10 +106,11 @@
      *
      * @param component component name
      * @param request   JSON configuration
-     * @return 200 OK
+     * @return 204 NO CONTENT
      * @throws IOException to signify bad request
      */
     @DELETE
+    @Consumes(MediaType.APPLICATION_JSON)
     @Path("{component}")
     public Response unsetConfigs(@PathParam("component") String component,
                                  InputStream request) throws IOException {
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
index 1fdb060..ec32b20 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
@@ -224,11 +224,12 @@
      *
      * @param deviceId device identifier
      * @param flowId   flow rule identifier
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/{flowId}")
-    public void deleteFlowByDeviceIdAndFlowId(@PathParam("deviceId") String deviceId,
+    public Response deleteFlowByDeviceIdAndFlowId(@PathParam("deviceId") String deviceId,
                                               @PathParam("flowId") long flowId) {
         final Iterable<FlowEntry> flowEntries =
                 service.getFlowEntries(DeviceId.deviceId(deviceId));
@@ -240,16 +241,18 @@
         StreamSupport.stream(flowEntries.spliterator(), false)
                 .filter(entry -> entry.id().value() == flowId)
                 .forEach(service::removeFlowRules);
+        return Response.noContent().build();
     }
 
     /**
      * Removes a batch of flow rules.
      *
      * @param stream stream for posted JSON
+     * @return NO CONTENT
      */
     @DELETE
     @Produces(MediaType.APPLICATION_JSON)
-    public void deleteFlows(InputStream stream) {
+    public Response deleteFlows(InputStream stream) {
         ListMultimap<DeviceId, Long> deviceMap = ArrayListMultimap.create();
         List<FlowEntry> rulesToRemove = new ArrayList<>();
 
@@ -283,6 +286,7 @@
         });
 
         service.removeFlowRules(rulesToRemove.toArray(new FlowEntry[0]));
+        return Response.noContent().build();
     }
 
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
index ad9c64e..65a1a2f 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
@@ -172,15 +172,17 @@
      *
      * @param deviceId  device identifier
      * @param appCookie application cookie to be used for lookup
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/{appCookie}")
-    public void deleteGroupByDeviceIdAndAppCookie(@PathParam("deviceId") String deviceId,
-                                                  @PathParam("appCookie") String appCookie) {
+    public Response deleteGroupByDeviceIdAndAppCookie(@PathParam("deviceId") String deviceId,
+                                                      @PathParam("appCookie") String appCookie) {
         DeviceId deviceIdInstance = DeviceId.deviceId(deviceId);
         GroupKey appCookieInstance = new DefaultGroupKey(appCookie.getBytes());
 
         groupService.removeGroup(deviceIdInstance, appCookieInstance, null);
+        return Response.noContent().build();
     }
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
index d275599..3199bcc 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
@@ -15,25 +15,7 @@
  */
 package org.onosproject.rest.resources;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Objects;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriBuilder;
-import javax.ws.rs.core.UriInfo;
-
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.intent.HostToHostIntent;
@@ -47,7 +29,23 @@
 import org.onosproject.rest.AbstractWebResource;
 import org.slf4j.Logger;
 
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Objects;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 import static org.onlab.util.Tools.nullIsNotFound;
 import static org.onosproject.net.intent.IntentState.FAILED;
@@ -168,10 +166,11 @@
      *
      * @param appId application identifier
      * @param key   intent key
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{appId}/{key}")
-    public void deleteIntentById(@PathParam("appId") String appId,
+    public Response deleteIntentById(@PathParam("appId") String appId,
                                  @PathParam("key") String key) {
         final ApplicationId app = get(CoreService.class).getAppId(appId);
 
@@ -185,10 +184,9 @@
         if (intent == null) {
             // No such intent.  REST standards recommend a positive status code
             // in this case.
-            return;
+            return Response.noContent().build();
         }
 
-
         Key k = intent.key();
 
         // set up latch and listener to track uninstall progress
@@ -216,6 +214,7 @@
             // clean up the listener
             service.removeListener(listener);
         }
+        return Response.noContent().build();
     }
 
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
index 4e675f6..34a014f 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
@@ -165,11 +165,11 @@
      *
      * @param deviceId device identifier
      * @param meterId  meter identifier
+     * @return 204 NO CONTENT
      */
     @DELETE
-    @Produces(MediaType.APPLICATION_JSON)
     @Path("{deviceId}/{meterId}")
-    public void deleteMeterByDeviceIdAndMeterId(@PathParam("deviceId") String deviceId,
+    public Response deleteMeterByDeviceIdAndMeterId(@PathParam("deviceId") String deviceId,
                                                 @PathParam("meterId") String meterId) {
         DeviceId did = DeviceId.deviceId(deviceId);
         MeterId mid = MeterId.meterId(Long.valueOf(meterId));
@@ -178,6 +178,7 @@
             final MeterRequest meterRequest = meterToMeterRequest(tmpMeter, "REMOVE");
             meterService.withdraw(meterRequest, tmpMeter.id());
         }
+        return Response.noContent().build();
     }
 
     /**
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
index f87351e..2a3cd8d 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
@@ -87,12 +87,12 @@
      * Removes a route from the multicast RIB.
      *
      * @param stream multicast route JSON
+     * @return 204 NO CONTENT
      * @onos.rsModel McastRoutePost
      */
     @DELETE
     @Consumes(MediaType.APPLICATION_JSON)
-    @Produces(MediaType.APPLICATION_JSON)
-    public void deleteRoute(InputStream stream) {
+    public Response deleteRoute(InputStream stream) {
         MulticastRouteService service = get(MulticastRouteService.class);
         try {
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
@@ -101,5 +101,6 @@
         } catch (IOException ex) {
             throw new IllegalArgumentException(ex);
         }
+        return Response.noContent().build();
     }
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
index 81e77a9..a39d81c 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
@@ -289,7 +289,7 @@
     /**
      * Clear entire network configuration base.
      *
-     * @return empty response
+     * @return 204 NO CONTENT
      */
     @DELETE
     @SuppressWarnings("unchecked")
@@ -299,22 +299,24 @@
                 .forEach(subjectClass -> service.getSubjects(subjectClass)
                         .forEach(subject -> service.getConfigs(subject)
                                 .forEach(config -> service.removeConfig(subject, config.getClass()))));
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     /**
      * Clear all network configurations for a subject class.
      *
      * @param subjectClassKey subject class key
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{subjectClassKey}")
     @SuppressWarnings("unchecked")
-    public void delete(@PathParam("subjectClassKey") String subjectClassKey) {
+    public Response delete(@PathParam("subjectClassKey") String subjectClassKey) {
         NetworkConfigService service = get(NetworkConfigService.class);
         service.getSubjects(service.getSubjectFactory(subjectClassKey).subjectClass())
                 .forEach(subject -> service.getConfigs(subject)
                         .forEach(config -> service.removeConfig(subject, config.getClass())));
+        return Response.noContent().build();
     }
 
     /**
@@ -322,15 +324,17 @@
      *
      * @param subjectClassKey subjectKey class key
      * @param subjectKey      subjectKey key
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{subjectClassKey}/{subjectKey}")
     @SuppressWarnings("unchecked")
-    public void delete(@PathParam("subjectClassKey") String subjectClassKey,
+    public Response delete(@PathParam("subjectClassKey") String subjectClassKey,
                            @PathParam("subjectKey") String subjectKey) {
         NetworkConfigService service = get(NetworkConfigService.class);
         Object s = service.getSubjectFactory(subjectClassKey).createSubject(subjectKey);
         service.getConfigs(s).forEach(c -> service.removeConfig(s, c.getClass()));
+        return Response.noContent().build();
     }
 
     /**
@@ -339,16 +343,18 @@
      * @param subjectClassKey subjectKey class key
      * @param subjectKey      subjectKey key
      * @param configKey       configuration class key
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{subjectClassKey}/{subjectKey}/{configKey}")
     @SuppressWarnings("unchecked")
-    public void delete(@PathParam("subjectClassKey") String subjectClassKey,
+    public Response delete(@PathParam("subjectClassKey") String subjectClassKey,
                            @PathParam("subjectKey") String subjectKey,
                            @PathParam("configKey") String configKey) {
         NetworkConfigService service = get(NetworkConfigService.class);
         service.removeConfig(service.getSubjectFactory(subjectClassKey).createSubject(subjectKey),
                              service.getConfigClass(subjectClassKey, configKey));
+        return Response.noContent().build();
     }
 
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
index 3a54eb4..20c080a 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
@@ -173,11 +173,10 @@
      */
     @DELETE
     @Path("{regionId}")
-    @Produces(MediaType.APPLICATION_JSON)
     public Response removeRegion(@PathParam("regionId") String regionId) {
         final RegionId rid = RegionId.regionId(regionId);
         regionAdminService.removeRegion(rid);
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     /**
@@ -213,13 +212,12 @@
      *
      * @param regionId region identifier
      * @param stream deviceIds JSON stream
-     * @return 200 OK, 404 not found
+     * @return 204 NO CONTENT
      * @onos.rsModel RegionDeviceIds
      */
     @DELETE
     @Path("{regionId}/devices")
     @Consumes(MediaType.APPLICATION_JSON)
-    @Produces(MediaType.APPLICATION_JSON)
     public Response removeDevices(@PathParam("regionId") String regionId,
                                   InputStream stream) {
         final RegionId rid = RegionId.regionId(regionId);
@@ -230,7 +228,7 @@
             throw new IllegalArgumentException(e);
         }
 
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     /**
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java
index afef7a7..83c6c4d 100755
--- a/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java
@@ -97,7 +97,7 @@
      * Removes the specified tenant with the specified tenant identifier.
      *
      * @param tenantId tenant identifier
-     * @return 200 OK, 404 not found
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{tenantId}")
@@ -105,7 +105,7 @@
         final TenantId tid = TenantId.tenantId(tenantId);
         final TenantId existingTid = getExistingTenantId(vnetAdminService, tid);
         vnetAdminService.unregisterTenantId(existingTid);
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     /**
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java
index 22078c2..252ca53 100755
--- a/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java
@@ -135,14 +135,14 @@
      * Removes the virtual network with the specified network identifier.
      *
      * @param networkId network identifier
-     * @return 200 OK, 404 not found
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{networkId}")
     public Response removeVirtualNetwork(@PathParam("networkId") long networkId) {
         NetworkId nid = NetworkId.networkId(networkId);
         vnetAdminService.removeVirtualNetwork(nid);
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     // VirtualDevice
@@ -203,7 +203,7 @@
      *
      * @param networkId network identifier
      * @param deviceId  device identifier
-     * @return 200 OK, 404 not found
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{networkId}/devices/{deviceId}")
@@ -212,7 +212,7 @@
         NetworkId nid = NetworkId.networkId(networkId);
         DeviceId did = DeviceId.deviceId(deviceId);
         vnetAdminService.removeVirtualDevice(nid, did);
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     // VirtualPort
@@ -293,7 +293,7 @@
      * @param networkId network identifier
      * @param deviceId  virtual device identifier
      * @param portNum   virtual port number
-     * @return 200 OK, 404 not found
+     * @return 204 NO CONTENT
      */
     @DELETE
     @Path("{networkId}/devices/{deviceId}/ports/{portNum}")
@@ -303,7 +303,7 @@
         NetworkId nid = NetworkId.networkId(networkId);
         vnetAdminService.removeVirtualPort(nid, DeviceId.deviceId(deviceId),
                                            PortNumber.portNumber(portNum));
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     // VirtualLink
@@ -364,7 +364,7 @@
      *
      * @param networkId network identifier
      * @param stream    virtual link JSON stream
-     * @return 200 OK, 404 not found
+     * @return 204 NO CONTENT
      * @onos.rsModel VirtualLink
      */
     @DELETE
@@ -386,7 +386,7 @@
             throw new IllegalArgumentException(e);
         }
 
-        return Response.ok().build();
+        return Response.noContent().build();
     }
 
     /**