diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/InvalidConfigExceptionMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/InvalidConfigExceptionMapper.java
new file mode 100644
index 0000000..ecbe0af
--- /dev/null
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/InvalidConfigExceptionMapper.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.rest.exceptions;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.rest.exceptions.AbstractMapper;
+import org.onosproject.net.config.InvalidConfigException;
+import org.onosproject.net.config.InvalidFieldException;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * Maps InvalidConfigException to JSON output.
+ */
+public class InvalidConfigExceptionMapper extends AbstractMapper<InvalidConfigException> {
+
+    @Override
+    protected Response.Status responseStatus() {
+        return Response.Status.BAD_REQUEST;
+    }
+
+    @Override
+    protected Response.ResponseBuilder response(Response.Status status, Throwable exception) {
+        error = exception;
+
+        InvalidConfigException ex = (InvalidConfigException) exception;
+
+        ObjectMapper mapper = new ObjectMapper();
+        String message = messageFrom(exception);
+        ObjectNode result = mapper.createObjectNode()
+                .put("code", status.getStatusCode())
+                .put("message", message)
+                .put("subjectKey", ex.subjectKey())
+                .put("subject", ex.subject())
+                .put("configKey", ex.configKey());
+
+        if (ex.getCause() instanceof InvalidFieldException) {
+            InvalidFieldException fieldException = (InvalidFieldException) ex.getCause();
+            result.put("field", fieldException.field())
+                    .put("reason", fieldException.reason());
+        }
+
+        return Response.status(status).entity(result.toString());
+    }
+}
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/package-info.java b/web/api/src/main/java/org/onosproject/rest/exceptions/package-info.java
new file mode 100644
index 0000000..26c7f26
--- /dev/null
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * REST exceptions.
+ */
+package org.onosproject.rest.exceptions;
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java b/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java
index 3a4170b..b8597fa 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/CoreWebApplication.java
@@ -17,6 +17,7 @@
 package org.onosproject.rest.resources;
 
 import org.onlab.rest.AbstractWebApplication;
+import org.onosproject.rest.exceptions.InvalidConfigExceptionMapper;
 
 import java.util.Set;
 
@@ -49,7 +50,8 @@
                 RegionsWebResource.class,
                 TenantWebResource.class,
                 VirtualNetworkWebResource.class,
-                MastershipWebResource.class
+                MastershipWebResource.class,
+                InvalidConfigExceptionMapper.class
         );
     }
 }
