Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
package org.baeldung.repository;

import org.baeldung.web.dto.HeavyResource;
import org.baeldung.web.dto.HeavyResourceAddressPartialUpdate;
import org.baeldung.web.dto.HeavyResourceAddressOnly;

import java.util.Map;

public class HeavyResourceRepository {

public void save(HeavyResource heavyResource) {
}

public void save(HeavyResourceAddressPartialUpdate partialUpdate) {
public void save(HeavyResourceAddressOnly partialUpdate) {

}

public void save(Map<String, Object> updates, String id) {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@

import org.baeldung.repository.HeavyResourceRepository;
import org.baeldung.web.dto.HeavyResource;
import org.baeldung.web.dto.HeavyResourceAddressPartialUpdate;
import org.baeldung.web.dto.HeavyResourceAddressOnly;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
public class HeavyResourceController {
Expand All @@ -23,9 +22,16 @@ public ResponseEntity<?> saveResource(@RequestBody HeavyResource heavyResource)
}

@RequestMapping(value = "/heavy", method = RequestMethod.PATCH, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> partialUpdateName(@RequestBody HeavyResourceAddressPartialUpdate partialUpdate) {
public ResponseEntity<?> partialUpdateName(@RequestBody HeavyResourceAddressOnly partialUpdate) {
heavyResourceRepository.save(partialUpdate);
return ResponseEntity.ok("resource address updated");
}

@RequestMapping(value = "/heavy/{id}", method = RequestMethod.PATCH, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> partialUpdateGeneric(@RequestBody Map<String, Object> updates,
@PathVariable("id") String id) {
heavyResourceRepository.save(updates, id);
return ResponseEntity.ok("resource updated");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.baeldung.web.dto;


public class HeavyResourceAddressOnly {
private Integer id;
private String address;

public HeavyResourceAddressOnly() {
}

public HeavyResourceAddressOnly(Integer id, String address) {
this.id = id;
this.address = address;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import org.baeldung.config.WebConfig;
import org.baeldung.web.dto.HeavyResource;
import org.baeldung.web.dto.HeavyResourceAddressPartialUpdate;
import org.baeldung.web.dto.HeavyResourceAddressOnly;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -16,6 +16,8 @@
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import java.util.HashMap;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Expand Down Expand Up @@ -47,10 +49,21 @@ public void givenHeavyResource_whenSendPutRequest_thenCreateResource() throws Ex
}

@Test
public void givenNewAddressOfResource_whenExecutePutRequest_thenUpdateResourcePartially() throws Exception {
public void givenNewAddressOfResource_whenExecutePatchRequest_thenUpdateResourcePartially() throws Exception {
mockMvc.perform(patch("/heavy")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(objectMapper.writeValueAsString(new HeavyResourceAddressPartialUpdate(1, "5th avenue")))
.content(objectMapper.writeValueAsString(new HeavyResourceAddressOnly(1, "5th avenue")))
).andExpect(status().isOk());
}

@Test
public void givenNewAddressOfResource_whenExecutePatchGeneric_thenUpdateResourcePartially() throws Exception {
HashMap<String, Object> updates = new HashMap<>();
updates.put("address", "5th avenue");

mockMvc.perform(patch("/heavy/1")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(objectMapper.writeValueAsString(updates))
).andExpect(status().isOk());
}

Expand Down