215. RESTFul Web Services with Spring MVC (POST ) - dkkahm/study-springfamework5 GitHub Wiki

DTO

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CustomerDTO {
    private String firstname;
    private String lastname;

    @JsonProperty("customer_url")
    private String customerUrl;
}

Service

@Override
public CustomerDTO createNewCustomer(CustomerDTO customerDTO) {
    Customer customer = customerMapper.customerDtoToCustomer(customerDTO);
    Customer savedCustomer = customerRepository.save(customer);
    CustomerDTO returnDto = customerMapper.customerToCustomerDTO(savedCustomer);
    returnDto.setCustomerUrl("/api/v1/customers/" + savedCustomer.getId());

    return returnDto;
}

Controller

@PostMapping
public ResponseEntity<CustomerDTO> createNewCustomer(@RequestBody CustomerDTO customerDTO) {
    return new ResponseEntity<CustomerDTO>(customerService.createNewCustomer(customerDTO), HttpStatus.CREATED);
}

Test

@Test
public void createNewCustomer() throws Exception {
    CustomerDTO customer = new CustomerDTO();
    customer.setFirstname("Fred");
    customer.setLastname("Flintstone");
 
    CustomerDTO returnDTO = new CustomerDTO();
    returnDTO.setFirstname(customer.getFirstname());
    returnDTO.setLastname(customer.getLastname());
    returnDTO.setCustomrUrl("/api/v1/customers/1");

    when(customerService.createNewCustomer(customer)).thenReturn(returnDTO);

    mockMvc.perform(post("/api/v1/customers")
                .contentType(MediaType.APPLICATION_JSON)
                .content(asJsonString(customer)))
            .andExpect(status().isCreated())
            .andExpect(jsonPath("$.firstname", equalTo("Fred")))
            .andExpect(jsonPath("$.customer_url", equlTo("/api/v1/customers/1")));