में आंशिक अपडेट के लिए शून्य और प्रदान नहीं किए गए मानों के बीच अंतर कैसे करें मैं स्प्रिंग रेस्ट कंट्रोलर में PUT अनुरोध विधि के साथ आंशिक रूप से किसी इकाई को आंशिक रूप से अद्यतन करते समय शून्य मानों के बीच अंतर करने की कोशिश कर रहा हूं।स्प्रिंग रेस्ट कंट्रोलर
, निम्नलिखित इकाई पर विचार करें एक उदाहरण के रूप:
@Entity
private class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/* let's assume the following attributes may be null */
private String firstName;
private String lastName;
/* getters and setters ... */
}
मेरे व्यक्ति भंडार (स्प्रिंग डाटा):
@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
}
डीटीओ मैं का उपयोग करें:
private class PersonDTO {
private String firstName;
private String lastName;
/* getters and setters ... */
}
मेरे स्प्रिंग RestController :
@RestController
@RequestMapping("/api/people")
public class PersonController {
@Autowired
private PersonRepository people;
@Transactional
@RequestMapping(path = "/{personId}", method = RequestMethod.PUT)
public ResponseEntity<?> update(
@PathVariable String personId,
@RequestBody PersonDTO dto) {
// get the entity by ID
Person p = people.findOne(personId); // we assume it exists
// update ONLY entity attributes that have been defined
if(/* dto.getFirstName is defined */)
p.setFirstName = dto.getFirstName;
if(/* dto.getLastName is defined */)
p.setLastName = dto.getLastName;
return ResponseEntity.ok(p);
}
}
लापता संपत्ति
{"firstName": "John"}
अपेक्षित व्यवहार के साथ अनुरोध: अद्यतन firstName= "John"
(छोड़ lastName
नहीं बदला गया)।
अशक्त संपत्ति
{"firstName": "John", "lastName": null}
अपेक्षित व्यवहार के साथ अनुरोध: अद्यतन firstName="John"
और lastName=null
निर्धारित किया है।
मैं इन दो मामलों के बीच अंतर नहीं कर सकते हैं, डीटीओ में lastName
के बाद से हमेशा जैक्सन ने null
को तैयार है।
नोट: मुझे पता है कि बाकी सर्वोत्तम प्रथाओं (RFC 6902) आंशिक अद्यतन के लिए के बजाय PATCH PUT उपयोग करने की अनुशंसा, लेकिन मेरी विशेष परिदृश्य में मैं PUT उपयोग करने के लिए की जरूरत है।
संभावित डुप्लिकेट [@RequestBody कैसे एक शून्य मान से एक नहीं भेजे गए मूल्य अंतर करने के लिए?] (Https://stackoverflow.com/questions/40610604/requestbody-how-to-differentiate-an-unsent-value -from-a-null-value) – laffuste