Allow user to explicitly set a Content-Type header on ghttp JSON handlers
diff --git a/ghttp/handlers.go b/ghttp/handlers.go
index 52fcd43..c3b56a4 100644
--- a/ghttp/handlers.go
+++ b/ghttp/handlers.go
@@ -190,7 +190,9 @@
 	} else {
 		headers = make(http.Header)
 	}
-	headers["Content-Type"] = []string{"application/json"}
+	if _, found := headers["Content-Type"]; !found {
+		headers["Content-Type"] = []string{"application/json"}
+	}
 	return RespondWith(statusCode, string(data), headers)
 }
 
@@ -214,7 +216,9 @@
 		} else {
 			headers = make(http.Header)
 		}
-		headers["Content-Type"] = []string{"application/json"}
+		if _, found := headers["Content-Type"]; !found {
+			headers["Content-Type"] = []string{"application/json"}
+		}
 		copyHeader(headers, w.Header())
 		w.WriteHeader(*statusCode)
 		w.Write(data)
diff --git a/ghttp/test_server_test.go b/ghttp/test_server_test.go
index 40836a1..82aa3aa 100644
--- a/ghttp/test_server_test.go
+++ b/ghttp/test_server_test.go
@@ -583,10 +583,15 @@
 			})
 
 			Context("when optional headers are set", func() {
+				var headers http.Header
 				BeforeEach(func() {
+					headers = http.Header{"Stuff": []string{"things"}}
+				})
+
+				JustBeforeEach(func() {
 					s.AppendHandlers(CombineHandlers(
 						VerifyRequest("POST", "/foo"),
-						RespondWithJSONEncoded(http.StatusCreated, []int{1, 2, 3}, http.Header{"Stuff": []string{"things"}}),
+						RespondWithJSONEncoded(http.StatusCreated, []int{1, 2, 3}, headers),
 					))
 				})
 
@@ -603,6 +608,19 @@
 
 					Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"}))
 				})
+
+				Context("when setting the Content-Type explicitly", func() {
+					BeforeEach(func() {
+						headers["Content-Type"] = []string{"not-json"}
+					})
+
+					It("should use the Content-Type header that was explicitly set", func() {
+						resp, err = http.Post(s.URL()+"/foo", "application/json", nil)
+						Ω(err).ShouldNot(HaveOccurred())
+
+						Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-json"}))
+					})
+				})
 			})
 		})
 
@@ -650,12 +668,17 @@
 			})
 
 			Context("when optional headers are set", func() {
+				var headers http.Header
 				BeforeEach(func() {
+					headers = http.Header{"Stuff": []string{"things"}}
+				})
+
+				JustBeforeEach(func() {
 					code = http.StatusOK
 					object = testObject{}
 					s.AppendHandlers(CombineHandlers(
 						VerifyRequest("POST", "/foo"),
-						RespondWithJSONEncodedPtr(&code, &object, http.Header{"Stuff": []string{"things"}}),
+						RespondWithJSONEncodedPtr(&code, &object, headers),
 					))
 				})
 
@@ -672,6 +695,19 @@
 
 					Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"}))
 				})
+
+				Context("when setting the Content-Type explicitly", func() {
+					BeforeEach(func() {
+						headers["Content-Type"] = []string{"not-json"}
+					})
+
+					It("should use the Content-Type header that was explicitly set", func() {
+						resp, err = http.Post(s.URL()+"/foo", "application/json", nil)
+						Ω(err).ShouldNot(HaveOccurred())
+
+						Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-json"}))
+					})
+				})
 			})
 		})
 	})