Merge pull request #10429 from azhwani/BAEL-4739
BAEL-4739: Spring RestTemplate Exception
This commit is contained in:
commit
eb61bc0dc2
|
@ -0,0 +1,13 @@
|
||||||
|
package com.baeldung.resttemplateexception;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class RestTemplateExceptionApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(RestTemplateExceptionApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.baeldung.resttemplateexception.controller;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.baeldung.resttemplateexception.model.Criterion;
|
||||||
|
import com.baeldung.resttemplateexception.model.Product;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api")
|
||||||
|
public class ProductApi {
|
||||||
|
|
||||||
|
private List<Product> productList = new ArrayList<>(Arrays.asList(new Product(1, "Acer Aspire 5", 437), new Product(2, "ASUS VivoBook", 650), new Product(3, "Lenovo Legion", 990)));
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
public Product get(@RequestParam String criterion) throws JsonMappingException, JsonProcessingException {
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
Criterion crt = objectMapper.readValue(criterion, Criterion.class);
|
||||||
|
if (crt.getProp().equals("name"))
|
||||||
|
return findByName(crt.getValue());
|
||||||
|
|
||||||
|
// Search by other properties (id,price)
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Product findByName(String name) {
|
||||||
|
for (Product product : this.productList) {
|
||||||
|
if (product.getName().equals(name)) {
|
||||||
|
return product;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Other methods
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.baeldung.resttemplateexception.model;
|
||||||
|
|
||||||
|
public class Criterion {
|
||||||
|
|
||||||
|
private String prop;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public Criterion() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProp() {
|
||||||
|
return prop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProp(String prop) {
|
||||||
|
this.prop = prop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.baeldung.resttemplateexception.model;
|
||||||
|
|
||||||
|
public class Product {
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
private double price;
|
||||||
|
|
||||||
|
public Product() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Product(int id, String name, double price) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPrice() {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrice(double price) {
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package com.baeldung.resttemplateexception;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
|
import com.baeldung.resttemplateexception.model.Product;
|
||||||
|
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest(classes = { RestTemplate.class, RestTemplateExceptionApplication.class })
|
||||||
|
public class RestTemplateExceptionLiveTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
RestTemplate restTemplate;
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void givenGetUrl_whenJsonIsPassed_thenThrowException() {
|
||||||
|
String url = "http://localhost:8080/spring-rest/api/get?criterion={\"prop\":\"name\",\"value\":\"ASUS VivoBook\"}";
|
||||||
|
Product product = restTemplate.getForObject(url, Product.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenGetUrl_whenJsonIsPassed_thenGetProduct() {
|
||||||
|
String criterion = "{\"prop\":\"name\",\"value\":\"ASUS VivoBook\"}";
|
||||||
|
String url = "http://localhost:8080/spring-rest/api/get?criterion={criterion}";
|
||||||
|
Product product = restTemplate.getForObject(url, Product.class, criterion);
|
||||||
|
|
||||||
|
assertEquals(product.getPrice(), 650, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenGetUrl_whenJsonIsPassed_thenReturnProduct() {
|
||||||
|
String criterion = "{\"prop\":\"name\",\"value\":\"Acer Aspire 5\"}";
|
||||||
|
String url = "http://localhost:8080/spring-rest/api/get";
|
||||||
|
|
||||||
|
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParam("criterion", criterion);
|
||||||
|
Product product = restTemplate.getForObject(builder.build().toUri(), Product.class);
|
||||||
|
|
||||||
|
assertEquals(product.getId(), 1, 0);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue