#spring
Вопрос:
Я работаю с API Redmine и хочу обновить проблему.
Проблема имеет 30 переменных, Тему, Описание, Автора и Получателя …
У меня нет проблем с обновлением темы и описания проблемы, как это:
@RequestMapping(value = "/issues/update/{id}", method = RequestMethod.PUT)
public ResponseEntity<Object> issueUpdate(@RequestBody ObjectNode json, @PathVariable int id) throws RedmineException, RuntimeException, IllegalArgumentException {
String apiKey = json.get("API_KEY").asText();
RedmineManager mgr = RedmineManagerFactory.createWithApiKey("http://localhost:3001/", apiKey);
IssueManager issueManager = mgr.getIssueManager();
Issue issue = issueManager.getIssueById(id);
issue.setSubject(json.get("SUBJECT").asText())
.setDescription(json.get("DESCRIPTION").asText())
.update();
return new ResponseEntity<>(HttpStatus.OK);
}
Проблема с этим способом заключается в том, что мне разрешено изменять только эти 2 значения, и я должен включить ТЕМУ и ОПИСАНИЕ в тело моего запроса JSON.
Если ТЕМА отсутствует в JSON, то она будет считаться пустой, и я получу NullPointerException
.
Я хочу сделать что-то более гибкое и элегантное, чтобы позволять изменять каждое значение, а если оно не существует, не устанавливайте значение null, а сохраняйте старые значения.
что-то логичное в этом, но немного умнее
if json.get("SUBJECT").asText() != null {
issue.setSubject(json.get("SUBJECT").asText()) //set if mentioned
} else {
issue.setSubject(issue.getSubject()) //set the old value
}
Идея в том, что теперь я могу иметь setSubject и все другие доступные сеттеры на случай, если это будет упомянуто в моем запросе JSON или нет.