#java #mongodb #spring-boot #microservices #rest
#java #mongodb #spring-boot #микросервисы #rest
Вопрос:
при попытке обновить существующую запись в таблице mongo db, используя PostMapping и запрос PUT, каждый раз, когда я пытаюсь обновить, в таблице создается новая запись..
Ниже приведен мой контроллер кода
@RestController
@RequestMapping("/expenses")
public class mydataExpController {
@PutMapping("/")
public mydataExpense updExpenses(@RequestBody mydataExpense exp){
return expenseServices.updData(exp);
}
Обслуживание
@Service
public class ExpenseServices {
@Autowired
mydataExpRepository mydataexprepository;
public mydataExpense updData(mydataExpense exp) {
return mydataexprepository.save(exp);
}
репозиторий
@Repository
public interface mydataExpRepository extends MongoRepository<mydataExpense, String> {
}
В postman
connection →keep-alive
content-type →application/json
date →Tue, 29 Dec 2020 10:54:51 GMT
keep-alive →timeout=60
transfer-encoding →chunked
каждый раз, когда я выполняю http://localhost:8080/expenses / с помощью PUT
в базе данных создается новая запись
Комментарии:
1. можете ли вы добавить пример содержимого? Скорее всего, вы неправильно передаете поле id.
2. Пожалуйста, ознакомьтесь с переданным содержимым и ответом
3. { «_id»: «5fedba90e11a563ce37e9890», «expdate»: «12-24-2020», «exptyp»: «Biriyani Hub», «expamt»: 0 }
4. { «expdate»: «12-24-2020», «exptyp»: «Biriyani Hub», «expamt»: 0 }
Ответ №1:
Я думаю, что это создает новый объект, потому что вы просто передаете его прямо в repo.save() .
Сначала вы должны найти существующий myDataExpense и изменить / обновить его, а затем вызвать repository.save() .
К вашему сведению, вы также могли бы сделать что-то подобное с MongoTemplate.
Query query = Query.query(Criteria.where("<id attribute name of your myDataExpense Document>").is(exp.getId);
Update update = new Update().set(".....$", exp);
mongoTemplate.updateFirst(query, update, myDataExpense.class);