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 ffb9149..8fa660e 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
@@ -19,6 +19,7 @@
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.meter.DefaultMeterRequest;
 import org.onosproject.net.meter.Meter;
 import org.onosproject.net.meter.MeterId;
@@ -140,12 +141,17 @@
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
 
-            if (specifiedDeviceId != null &&
-                    !specifiedDeviceId.asText().equals(deviceId)) {
+            if ((specifiedDeviceId != null &&
+                    !specifiedDeviceId.asText().equals(deviceId)) ||
+                    get(DeviceService.class).getDevice(DeviceId.deviceId(deviceId))
+                            == null) {
                 throw new IllegalArgumentException(DEVICE_INVALID);
             }
+
             jsonTree.put("deviceId", deviceId);
-            final MeterRequest meterRequest = codec(MeterRequest.class).decode(jsonTree, this);
+            final MeterRequest meterRequest = codec(MeterRequest.class)
+                    .decode(jsonTree, this);
+
             final Meter meter = meterService.submit(meterRequest);
 
             UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java
index a23ca8c..ee6a656 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/MetersResourceTest.java
@@ -87,10 +87,13 @@
     final DeviceId deviceId1 = DeviceId.deviceId("1");
     final DeviceId deviceId2 = DeviceId.deviceId("2");
     final DeviceId deviceId3 = DeviceId.deviceId("3");
+    final DeviceId deviceId4 = DeviceId.deviceId("of:0000000000000001");
     final Device device1 = new DefaultDevice(null, deviceId1, Device.Type.OTHER,
             "", "", "", "", null);
     final Device device2 = new DefaultDevice(null, deviceId2, Device.Type.OTHER,
             "", "", "", "", null);
+    final Device device4 = new DefaultDevice(null, deviceId4, Device.Type.OTHER,
+                                             "", "", "", "", null);
 
     final MockMeter meter1 = new MockMeter(deviceId1, 1, 111, 1);
     final MockMeter meter2 = new MockMeter(deviceId1, 2, 222, 2);
@@ -214,8 +217,10 @@
                 .andReturn(device1);
         expect(mockDeviceService.getDevice(deviceId2))
                 .andReturn(device2);
+        expect(mockDeviceService.getDevice(deviceId4))
+                .andReturn(device4);
         expect(mockDeviceService.getDevices())
-                .andReturn(ImmutableSet.of(device1, device2));
+                .andReturn(ImmutableSet.of(device1, device2, device4));
 
         // Mock Core Service
         expect(mockCoreService.getAppId(anyShort()))
@@ -475,6 +480,7 @@
         mockMeterService.submit(anyObject());
         expectLastCall().andReturn(meter5).anyTimes();
         replay(mockMeterService);
+        replay(mockDeviceService);
 
         WebTarget wt = target();
         InputStream jsonStream = MetersResourceTest.class
@@ -489,6 +495,26 @@
     }
 
     /**
+     * Tests creating a meter with POST, but wrong deviceID.
+     */
+    @Test
+    public void testPostWithWrongDevice() {
+        mockMeterService.submit(anyObject());
+        expectLastCall().andReturn(meter5).anyTimes();
+        replay(mockMeterService);
+        replay(mockDeviceService);
+
+        WebTarget wt = target();
+        InputStream jsonStream = MetersResourceTest.class
+                .getResourceAsStream("post-meter.json");
+
+        Response response = wt.path("meters/of:0000000000000002")
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
+        assertThat(response.getStatus(), is(HttpURLConnection.HTTP_BAD_REQUEST));
+    }
+
+    /**
      * Tests deleting a meter.
      */
     @Test
