Return proper http status code for unsupported media type "Bad Request" (400) was returning instead of "Unsupported Media Type" (415). Change-Id: I7f660a0877bf4e6195a7b0b34f4acfd4bb4a9148
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServlet.java index 2aece3d..eae220b 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServlet.java +++ b/src/main/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServlet.java
@@ -18,6 +18,7 @@ import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; +import static javax.servlet.http.HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE; import com.google.common.base.Supplier; import com.google.common.io.CharStreams; @@ -62,6 +63,11 @@ rsp.setCharacterEncoding("UTF-8"); try { Context.setForwardedEvent(); + if (!MediaType.parse(req.getContentType()).is(JSON_UTF_8)) { + sendError(rsp, SC_UNSUPPORTED_MEDIA_TYPE, + "Expecting " + JSON_UTF_8.toString() + " content type"); + return; + } Event event = getEventFromRequest(req); dispatcher.postEvent(event); rsp.setStatus(SC_NO_CONTENT); @@ -77,15 +83,12 @@ } private Event getEventFromRequest(HttpServletRequest req) throws IOException { - if (MediaType.parse(req.getContentType()).is(JSON_UTF_8)) { - String jsonEvent = CharStreams.toString(req.getReader()); - Gson gson = new GsonBuilder() - .registerTypeAdapter(Event.class, new EventDeserializer()) - .registerTypeAdapter(Supplier.class, new SupplierDeserializer()) - .create(); - return gson.fromJson(jsonEvent, Event.class); - } - return null; + String jsonEvent = CharStreams.toString(req.getReader()); + Gson gson = new GsonBuilder() + .registerTypeAdapter(Event.class, new EventDeserializer()) + .registerTypeAdapter(Supplier.class, new SupplierDeserializer()) + .create(); + return gson.fromJson(jsonEvent, Event.class); } private static void sendError(HttpServletResponse rsp, int statusCode,
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServletTest.java index 8f417b3..e925e6f 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServletTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/syncevents/SyncEventsRestApiServletTest.java
@@ -14,9 +14,11 @@ package com.ericsson.gerrit.plugins.syncevents; +import static com.google.common.net.MediaType.JSON_UTF_8; import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; +import static javax.servlet.http.HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.isA; @@ -105,6 +107,19 @@ } @Test + public void testDoPostWrongMediaType() throws Exception { + resetAll(); + expect(req.getContentType()) + .andReturn(MediaType.APPLICATION_XML_UTF_8.toString()).anyTimes(); + rsp.sendError(SC_UNSUPPORTED_MEDIA_TYPE, + "Expecting " + JSON_UTF_8.toString() + " content type"); + expectLastCall().once(); + replayAll(); + syncEventsRestApiServlet.doPost(req, rsp); + verifyAll(); + } + + @Test public void testDoPostErrorWhileSendingErrorMessage() throws Exception { expect(req.getReader()).andThrow(new IOException("someError")); rsp.sendError(SC_BAD_REQUEST, "someError");