From e56da99216d9e63bc8b7c9b61569f9fe35e0fc63 Mon Sep 17 00:00:00 2001 From: Yasin Bhojawala Date: Sun, 29 Oct 2017 17:20:47 +0530 Subject: [PATCH] BAEL-1217 Guide to Spring Type Conversions Review comments --- .../converter/GenericBigDecimalConverter.java | 5 ++- .../StringToEmployeeConverterController.java | 21 ++++++++++ .../converter/CustomConverterTest.java | 20 +++++++--- ...ringToEmployeeConverterControllerTest.java | 39 +++++++++++++++++++ 4 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 spring-boot/src/main/java/org/baeldung/converter/controller/StringToEmployeeConverterController.java create mode 100644 spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerTest.java diff --git a/spring-boot/src/main/java/org/baeldung/converter/GenericBigDecimalConverter.java b/spring-boot/src/main/java/org/baeldung/converter/GenericBigDecimalConverter.java index da46c43dad..e96dbeaf47 100644 --- a/spring-boot/src/main/java/org/baeldung/converter/GenericBigDecimalConverter.java +++ b/spring-boot/src/main/java/org/baeldung/converter/GenericBigDecimalConverter.java @@ -5,6 +5,7 @@ import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.GenericConverter; import java.math.BigDecimal; +import java.math.MathContext; import java.util.Set; public class GenericBigDecimalConverter implements GenericConverter { @@ -30,7 +31,9 @@ public class GenericBigDecimalConverter implements GenericConverter { return new BigDecimal(number); } else { Number number = (Number) source; - return new BigDecimal(number.doubleValue()); + BigDecimal converted = new BigDecimal(number.doubleValue()); + converted.setScale(2, BigDecimal.ROUND_HALF_EVEN); + return converted; } } } diff --git a/spring-boot/src/main/java/org/baeldung/converter/controller/StringToEmployeeConverterController.java b/spring-boot/src/main/java/org/baeldung/converter/controller/StringToEmployeeConverterController.java new file mode 100644 index 0000000000..f08bd9149e --- /dev/null +++ b/spring-boot/src/main/java/org/baeldung/converter/controller/StringToEmployeeConverterController.java @@ -0,0 +1,21 @@ +package org.baeldung.converter.controller; + +import com.baeldung.toggle.Employee; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/string-to-employee") +public class StringToEmployeeConverterController { + + @GetMapping + public ResponseEntity getStringToEmployee(@RequestParam("employee") Employee employee) { + return ResponseEntity.ok(employee); + } + + @PostMapping(consumes = {MediaType.TEXT_PLAIN_VALUE}) + public ResponseEntity postStringToEmployee(@RequestBody Employee employee) { + return ResponseEntity.ok(employee); + } +} diff --git a/spring-boot/src/test/java/org/baeldung/converter/CustomConverterTest.java b/spring-boot/src/test/java/org/baeldung/converter/CustomConverterTest.java index eda05a8441..8446196758 100644 --- a/spring-boot/src/test/java/org/baeldung/converter/CustomConverterTest.java +++ b/spring-boot/src/test/java/org/baeldung/converter/CustomConverterTest.java @@ -13,6 +13,8 @@ import org.springframework.test.context.web.WebAppConfiguration; import java.math.BigDecimal; +import static org.assertj.core.api.Assertions.assertThat; + @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = Application.class) @WebAppConfiguration @@ -23,23 +25,29 @@ public class CustomConverterTest { @Test public void whenConvertStringToIntegerUsingDefaultConverter_thenSuccess() { - System.out.println(conversionService.convert("25", Integer.class)); + assertThat(conversionService.convert("25", Integer.class)).isEqualTo(25); } @Test public void whenConvertStringToEmployee_thenSuccess() { - System.out.println(conversionService.convert("1,50000.00", Employee.class)); + Employee employee = conversionService.convert("1,50000.00", Employee.class); + Employee actualEmployee = new Employee(1, 50000.00); + assertThat(conversionService.convert("1,50000.00", Employee.class)) + .isEqualToComparingFieldByField(actualEmployee); } @Test public void whenConvertStringToEnum_thenSuccess() { - System.out.println(conversionService.convert("ALPHA", Modes.class)); + assertThat(conversionService.convert("ALPHA", Modes.class)).isEqualTo(Modes.ALPHA); } @Test public void whenConvertingToBigDecimalUsingGenericConverter_thenSuccess() { - System.out.println(conversionService.convert(Integer.valueOf(11), BigDecimal.class)); - System.out.println(conversionService.convert(Double.valueOf(25.23), BigDecimal.class)); - System.out.println(conversionService.convert("2.32", BigDecimal.class)); + assertThat(conversionService.convert(Integer.valueOf(11), BigDecimal.class)). + isEqualTo(BigDecimal.valueOf(11)); + assertThat(conversionService.convert(Double.valueOf(25.23), BigDecimal.class)) + .isEqualByComparingTo(BigDecimal.valueOf(Double.valueOf(25.23))); + assertThat(conversionService.convert("2.32", BigDecimal.class)) + .isEqualTo(BigDecimal.valueOf(2.32)); } } diff --git a/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerTest.java b/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerTest.java new file mode 100644 index 0000000000..5e005af0ea --- /dev/null +++ b/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerTest.java @@ -0,0 +1,39 @@ +package org.baeldung.converter.controller; + +import org.baeldung.Application; +import org.baeldung.boot.DemoApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.CoreMatchers.is; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Application.class) +@AutoConfigureMockMvc +//@AutoConfigureTestDatabase +public class StringToEmployeeConverterControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Test + public void getStringToEmployeeTest() throws Exception { + mockMvc.perform(get("/string-to-employee?employee=1,2000")) + .andDo(print()) + .andExpect(jsonPath("$.id", is(1))) + .andExpect(jsonPath("$.salary", is(2000.0))) + .andExpect(status().isOk()); + } +} \ No newline at end of file