Custom media types rest (#939)

* Custom Media Types for REST

* add test, add DTO, remove example of API versioning to make example simpler

* client accept only that custom-media type

* remove not needed new_line

* leave custom media type on class level

* do not need content type header

* GET do not need content-Type

* add liveTest for custom Content type

* Merge branch 'master' of https://github.com/eugenp/tutorials into Custom_media_types_rest

# Conflicts:
#	spring-rest/src/main/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeController.java
#	spring-rest/src/main/java/org/baeldung/web/dto/BaeldungItem.java
#	spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerTest.java
This commit is contained in:
Tomasz Lelek 2016-12-29 23:44:21 +01:00 committed by Eugen
parent 373f336b81
commit 0e163811ac
4 changed files with 47 additions and 3 deletions

View File

@ -8,10 +8,10 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/", produces = "application/vnd.baeldung.api.v1+json", consumes = "application/vnd.baeldung.api.v1+json")
@RequestMapping(value = "/", produces = "application/vnd.baeldung.api.v1+json")
public class CustomMediaTypeController {
@RequestMapping(value = "/public/api/endpoint", produces = "application/vnd.baeldung.api.v1+json", consumes = "application/vnd.baeldung.api.v1+json")
@RequestMapping(value = "/public/api/endpoint", produces = "application/vnd.baeldung.api.v1+json")
public @ResponseBody ResponseEntity<BaeldungItem> getItem() {
return new ResponseEntity<>(new BaeldungItem("itemId1"), HttpStatus.OK);
}

View File

@ -0,0 +1,33 @@
package org.baeldung.web.controller.mediatypes;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.response.Response;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class}, loader = AnnotationConfigContextLoader.class)
public class CustomMediaTypeControllerLiveTest {
private static final String URL_PREFIX = "http://localhost:8082/spring-rest";
private static final String CUSTOM_CONTENT_TYPE = "application/vnd.baeldung.api.v1+json";
@Test
public void getFor_customMediaType() {
//given
String url = URL_PREFIX + "/public/api/endpoint";
//when
Response response = RestAssured.get(url);
//then
assertEquals(200, response.getStatusCode());
assertTrue(response.contentType().contains(CUSTOM_CONTENT_TYPE));
}
}

View File

@ -32,6 +32,6 @@ public class CustomMediaTypeControllerTest {
@Test
public void shouldSendRequestForItem() throws Exception {
mockMvc.perform(get("/public/api/endpoint").contentType("application/vnd.baeldung.api.v1+json").accept("application/vnd.baeldung.api.v1+json")).andExpect(status().isOk());
mockMvc.perform(get("/public/api/endpoint").accept("application/vnd.baeldung.api.v1+json")).andExpect(status().isOk());
}
}

View File

@ -0,0 +1,11 @@
package org.baeldung.web.controller.mediatypes;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan({ "org.baeldung.web" })
public class TestConfig {
}