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 be484ef..bc3cdec 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
@@ -51,6 +51,7 @@
 public class MetersWebResource extends AbstractWebResource {
     private final Logger log = getLogger(getClass());
     public static final String DEVICE_INVALID = "Invalid deviceId in meter creation request";
+    public static final String METER_NOT_FOUND = "Meter is not found for ";
 
     final MeterService meterService = get(MeterService.class);
     final ObjectNode root = mapper().createObjectNode();
@@ -107,7 +108,7 @@
         MeterId mid = MeterId.meterId(Long.valueOf(meterId));
 
         final Meter meter = nullIsNotFound(meterService.getMeter(did, mid),
-                "Meter is not found for " + mid.id());
+                METER_NOT_FOUND + mid.id());
 
         metersNode.add(codec(Meter.class).encode(meter, this));
         return ok(root).build();
diff --git a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
index fb027d1..21ca646 100644
--- a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
@@ -46,6 +46,7 @@
 import org.onosproject.net.meter.MeterId;
 import org.onosproject.net.meter.MeterService;
 import org.onosproject.net.meter.MeterState;
+import org.onosproject.rest.resources.CoreWebApplication;
 
 import javax.ws.rs.core.MediaType;
 import java.io.InputStream;
@@ -66,6 +67,7 @@
 import static org.easymock.EasyMock.verify;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.onosproject.net.NetTestTools.APP_ID;
@@ -94,6 +96,10 @@
     final MockMeter meter4 = new MockMeter(deviceId2, 4, 444, 4);
     final MockMeter meter5 = new MockMeter(deviceId3, 5, 555, 5);
 
+    public MetersResourceTest() {
+        super(CoreWebApplication.class);
+    }
+
     /**
      * Mock class for a meter.
      */
@@ -446,6 +452,24 @@
     }
 
     /**
+     * Test whether the REST API returns 404 if no entry has been found.
+     */
+    @Test
+    public void testMeterByDeviceIdAndMeterId() {
+        setupMockMeters();
+
+        expect(mockMeterService.getMeter(anyObject(), anyObject()))
+                .andReturn(null).anyTimes();
+        replay(mockMeterService);
+
+        final WebResource rs = resource();
+        final ClientResponse response = rs.path("meters/" + deviceId3.toString()
+                + "/" + "888").get(ClientResponse.class);
+
+        assertEquals(404, response.getStatus());
+    }
+
+    /**
      * Tests creating a meter with POST.
      */
     @Test
