diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java
index a16821f..78010b9 100644
--- a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java
+++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java
@@ -501,7 +501,7 @@
       return badRequest("Input is not a valid ZNRecord!");
     }
 
-    if (!record.getId().equals(clusterId)) {
+    if (!clusterId.equals(record.getId())) {
       return badRequest("ID does not match the cluster name in input!");
     }
 
diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ResourceAccessor.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ResourceAccessor.java
index 8c93c79..ec63076 100644
--- a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ResourceAccessor.java
+++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ResourceAccessor.java
@@ -422,6 +422,11 @@
       _logger.error("Failed to deserialize user's input " + content + ", Exception: " + e);
       return badRequest("Input is not a valid ZNRecord!");
     }
+
+    if (!resourceName.equals(record.getId())) {
+      return badRequest("ID does not match the resourceName name in input!");
+    }
+
     ResourceConfig resourceConfig = new ResourceConfig(record);
     ConfigAccessor configAccessor = getConfigAccessor();
     try {
diff --git a/helix-rest/src/test/java/org/apache/helix/rest/server/TestResourceAccessor.java b/helix-rest/src/test/java/org/apache/helix/rest/server/TestResourceAccessor.java
index d194ccb..ce11b2f 100644
--- a/helix-rest/src/test/java/org/apache/helix/rest/server/TestResourceAccessor.java
+++ b/helix-rest/src/test/java/org/apache/helix/rest/server/TestResourceAccessor.java
@@ -380,6 +380,29 @@
    * @throws Exception
    */
   @Test(dependsOnMethods = "updateResourceConfig")
+  public void updateResourceConfigIDMissing() throws Exception {
+    System.out.println("Start test :" + TestHelper.getTestMethodName());
+    // An invalid input which does not have any ID
+    String dummyInput = "{\"simpleFields\":{}}";
+
+    String dummyResourceName = "RESOURCE_TEST_DUMMY";
+    // Update the config with dummy input
+    Entity entity = Entity.entity(dummyInput, MediaType.APPLICATION_JSON_TYPE);
+    // As id field is missing, the response of the post request should be BAD_REQUEST
+    post("clusters/" + CLUSTER_NAME + "/resources/" + dummyResourceName + "/configs", null, entity,
+        Response.Status.BAD_REQUEST.getStatusCode());
+    ResourceConfig resourceConfig =
+        _configAccessor.getResourceConfig(CLUSTER_NAME, dummyResourceName);
+    // Since the id is missing in the input, the znode should not get created.
+    Assert.assertNull(resourceConfig);
+    System.out.println("End test :" + TestHelper.getTestMethodName());
+  }
+
+  /**
+   * Test "delete" command of updateResourceConfig.
+   * @throws Exception
+   */
+  @Test(dependsOnMethods = "updateResourceConfigIDMissing")
   public void deleteFromResourceConfig() throws Exception {
     ZNRecord record = new ZNRecord(RESOURCE_NAME);
 
