java - 我有更新电影的更新方法。但是当我在邮递员中提供数据时,我输入一个字段,然后剩下的字段得到空值
问题描述
这是电影列表。
public static List<Movie> movies;
static {
movies = new ArrayList<>();
movies.add(new Movie(1, "Fprd vs Ferrari", "Movie on Racing", "abcd", "xyz"));
movies.add(new Movie(2, "F2", "Comedy Movie", "Venkatesh", "Tamanna"));
movies.add(new Movie(3, "Titanic", "Movie", "Hero", "Heroine"));
}
这是更新方法:
public Result update(Http.Request request, int id) {
Movie movie = findById(id);
if (movie == null) {
return notFound("Movie not Found");
}
JsonNode jsonNode = request.body().asJson();
Movie movie1 = Json.fromJson(jsonNode, Movie.class);
movie1.setId(id);
int index = movies.indexOf(movie);
movies.set(index, movie1);
return ok(Json.toJson(movie1));
}
当我使用邮递员发送数据时,例如我将只提供电影名称,然后电影将更新,但其余字段将获得空值。
但是我想更新数据,如果我没有发送任何字段,它将与对象的现有值一起存储。
我怎么能这样做..这是什么条件
解决方案
提醒一下:在 RESTful 设计中,有两种类似的方法:PUT
,使用您传递的值(包括空值,如您当前的实现)更新您的实体,以及PATCH
,仅更新非值字段。
[更好的解释:https ://medium.com/backticks-tildes/restful-api-design-put-vs-patch-4a061aa3ed0b ]
所以我的方法是实现两种变体:
public Result put(Http.Request request, int id) {
return update(request,id,true);
}
public Result patch(Http.Request request, int id) {
return update(request,id,false);
}
private Result update(Http.Request request, int id, boolean forceUpdate) {
Movie existing = findById(id);
if (existing == null) {
return notFound("Movie not Found");
}
JsonNode jsonNode = request.body().asJson();
Movie received = Json.fromJson(jsonNode, Movie.class);
if (forceUpdate || received.getMovieName() != null) {
existing.setMovieName(received.getMovieName());
}
// same for the rest of fields in Movie. You may want to use reflection
// instead of writing the same for each field manually
...
return ok(Json.toJson(existing));
}
推荐阅读
- selenium - 一个类中提到的 TestNg 注释是如何从另一个类的另一个类中执行的?
- python - 如何解释 tensorflow 中 tf.rank 的输出
- jquery - 找到最大数量的 tr
- javascript - 如何将丢失的对象添加到数组中?
- c# - Process.Start() 的可靠性然后使用 C# 关闭当前进程
- html-table - 如何将 HTML 表格转换为 PDF 并与 CSS 一起保存为 PDF - 客户端?
- html - 如何在html中禁用用户名的自动填充?
- javascript - RXJS ^5.3.0 与 AWS JS 开发工具包
- pandas - 具有时间序列的高维数据
- google-apps-script - googleappscript 中的错误