我在 url 中使用路徑變數來更新我的物件。如果我已經在 url 中得到了它,我如何修改我的代碼以使其作業而無需在帖子正文中提供 id?
public class Person {
private String name;
private UUID id;
public(UUID id, String name) {
this.id = id;
this.name = name;
}
...getters
}
服務等級
public int updatePerson(UUID id, Person person) {
String sql = "UPDATE person SET name = ? WHERE id = ?";
return jdbcTemplate.update(sql, person.getName(), person.getId());
}
控制器
@PutMapping("/{id}")
public int updatePerson(@PathVariable UUID id, @RequestBody Person person) {
return personService.updatePerson(id, person);
}
uj5u.com熱心網友回復:
只需將您的服務類更改為使用id而不是person.getId():
public int updatePerson(UUID id, Person person) {
String sql = "UPDATE person SET name = ? WHERE id = ?";
return jdbcTemplate.update(sql, person.getName(), id);
}
uj5u.com熱心網友回復:
如果我理解您的問題,您希望將Person用作負載模板來更新該類的實體。
您可以使用 @JsonProperty 注釋。
public class Person {
private String name;
@JsonProperty(access = Access.WRITE_ONLY)
private UUID id;
public(UUID id, String name) {
this.id = id;
this.name = name;
}
...getters
}
uj5u.com熱心網友回復:
理想情況下,您將使用路徑變數來定位存盤在資料庫中的資訊。考慮例如:
@PostMapping("/{id}")
public ResponseEntity<int> updatePerson(@PathVariable UUID id, @RequestBody Person person) {
Person alreadyExistingPerson = personService.getPersonById(id);
if (alreadyExistingPerson == null) {
return ResponseEntity.notFound().build();
}
// Then, update the information you already have for Person with the new provided
// See this related SO question for options:
// https://stackoverflow.com/questions/65367995/copy-changed-fields-into-an-object-in-java/65369332#65369332
// In a simple use case
alreadyExistingPerson.setName(person.getName());
return personService.updatePerson(alreadyExistingPerson);
}
代碼中鏈接的問題。
您的服務將包括:
public int getPersonById(UUID id) {
String sql = "SELECT id, name FROM person WHERE id = ?";
// The queryForObject method has a lot of overloads, use the one you consider appropriate
return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) ->
new Person(
UUID.fromString(rs.getString("id")),
rs.getString("name")
)
);
}
public int updatePerson(Person person) {
String sql = "UPDATE person SET name = ? WHERE id = ?";
return jdbcTemplate.update(sql, person.getName(), person.getId());
}
在更新資訊時,最好使用POSTHTTP 方法而不是PUT.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370028.html
