Seria possível atualizar por exemplo dois campos pelo PATCH? Como seria?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Seria possível atualizar por exemplo dois campos pelo PATCH? Como seria?
Oi
Sim, é possível atualizar múltiplos campos utilizando o método PATCH. No caso do .NET 6, você pode utilizar a biblioteca JSONPatch para realizar essa atualização parcial.
No código do FilmeController.cs, você precisa adicionar o parâmetro JSONPatchDocument<UpdateFilmeDto> patch no método AtualizaFilmeParcial. Esse parâmetro representa o JSON parcial que contém as informações que você deseja atualizar.
Dentro do método, você pode aplicar as alterações utilizando o método ApplyTo do objeto patch. Por exemplo, se você quiser atualizar o campo "titulo" e o campo "genero", você pode fazer o seguinte:
patch.ApplyTo(filmeParaAtualizar, ModelState);
Em seguida, você pode validar o modelo filmeParaAtualizar utilizando o método TryValidateModel. Se o modelo for válido, você pode mapear as alterações para o objeto filme e salvar as mudanças no banco de dados.
if (!TryValidateModel(filmeParaAtualizar))
{
return ValidationProblem(ModelState);
}
_mapper.Map(filmeParaAtualizar, filme);
_context.SaveChanges();
Dessa forma, você consegue atualizar múltiplos campos utilizando o método PATCH.
Massa! Obrigado pela resposta!
Porém acho que eu também não fui muito específico. Me referia como seria a chamada pelo Postman por exemplo?!
No vídeo, eu vi que ele colocou no body:
{ "op" : "replace", "path" : "/titulo", "value" : "Avatar" }
Como seria atualizar numa única requisição o título e a duração por exemplo?
Agradeço desde já.
Ola Arthur, basta ao realizar o patch, colocar uma virgula para separar os diferentes objetos que voce deseja, exemplo:
[ { "op" : "replace", "path" : "/titulo", "value" : "Avatar" }, { "op" : "replace", "path" : "/duracao", "value" : "200" } ]
Ah bacana!
Muito Obrigado Nicolas!