[英]PUT request wont go through unless I provide ID in body
我在 url 中使用路徑變量來更新我的 object。 如果我已經在 url 中獲得它,我如何修改我的代碼以使其工作而無需在帖子正文中提供 id?
public class Person {
private String name;
private UUID id;
public(UUID id, String name) {
this.id = id;
this.name = name;
}
...getters
}
服務 class
public int updatePerson(UUID id, Person person) {
String sql = "UPDATE person SET name = ? WHERE id = ?";
return jdbcTemplate.update(sql, person.getName(), person.getId());
}
Controller
@PutMapping("/{id}")
public int updatePerson(@PathVariable UUID id, @RequestBody Person person) {
return personService.updatePerson(id, person);
}
只需將您的服務 class 更改為使用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);
}
如果我理解您的問題,您希望使用Person
作為有效負載模板來更新該 class 的實例。
您可以利用 JsonIgnore 注釋。
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
}
理想情況下,您將使用路徑變量來定位存儲在數據庫中的信息。 例如考慮:
@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());
}
在更新信息時,最好使用POST
HTTP 方法而不是PUT
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.