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 5751e35..ad45e50 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
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest.resources;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.cfg.ConfigProperty;
@@ -33,6 +34,8 @@
 import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.List;
+import java.util.ArrayList;
 import java.util.Set;
 
 import static org.onlab.util.Tools.nullIsNotFound;
@@ -42,6 +45,7 @@
  */
 @Path("configuration")
 public class ComponentConfigWebResource extends AbstractWebResource {
+    private static final int  MULTI_STATUS_RESPONE = 207;
 
     /**
      * Gets all component configurations.
@@ -102,16 +106,36 @@
                                InputStream request) throws IOException {
         ComponentConfigService service = get(ComponentConfigService.class);
         ObjectNode props = (ObjectNode) mapper().readTree(request);
+        List<String> errorMsgs = new ArrayList<String>();
         if (preset) {
-            props.fieldNames().forEachRemaining(k ->
-                    service.preSetProperty(component, k, props.path(k).asText()));
+                props.fieldNames().forEachRemaining(k -> {
+                    try {
+                        service.preSetProperty(component, k, props.path(k).asText());
+                    } catch (IllegalArgumentException e) {
+                        errorMsgs.add(e.getMessage());
+                    }
+                });
         } else {
-            props.fieldNames().forEachRemaining(k ->
-                    service.setProperty(component, k, props.path(k).asText()));
+                props.fieldNames().forEachRemaining(k -> {
+                    try {
+                        service.setProperty(component, k, props.path(k).asText());
+                    } catch (IllegalArgumentException e) {
+                        errorMsgs.add(e.getMessage());
+                    }
+                });
+        }
+        if (!errorMsgs.isEmpty()) {
+            return Response.status(MULTI_STATUS_RESPONE).entity(produceErrorJson(errorMsgs)).build();
         }
         return Response.ok().build();
     }
 
+    private ObjectNode produceErrorJson(List<String> errorMsgs) {
+        ObjectMapper mapper = new ObjectMapper();
+        ObjectNode result = mapper.createObjectNode().put("code", 207).putPOJO("message", errorMsgs);
+        return result;
+    }
+
     /**
      * Selectively clears configuration properties.
      * Clears only the properties present in the JSON request.
