java - 我有更新电影的更新方法。但是当我在 postman 中提供数据时,我输入一个字段,然后其余字段获取空值

标签 java json playframework playframework-2.5

这是电影列表。

    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));
    }

当我使用 postman 发送数据时,例如我将仅提供 movieName,然后电影将更新,但其余字段将获取空值。

但是我想更新数据,如果我没有发送任何字段,它将存储对象中的现有值。

我怎样才能做到这一点..这样做的条件是什么

最佳答案

提醒一下:在 RESTful 设计中,有两种类似的方法:PUT,它使用您传递的值(包括 null,如您当前的实现)准确更新您的实体,以及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));
    }

关于java - 我有更新电影的更新方法。但是当我在 postman 中提供数据时,我输入一个字段,然后其余字段获取空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59679413/

相关文章:

java - Swagger UI 无法正常工作 Rest APi

javascript - 如何检查对象结构是否存在?

scala - 在 Play 2.0 (scala) 中设置 HTTP header ?

java - 在 Play! 中呈现表单时添加附加信息! 2.0.2

java - Hashmap put(),是不是一直在排序?

java - 你如何让 Matlab 为 UTF-16 文本文件编写 BOM(字节顺序标记)?

java - (有必要吗?)ByteBuffer.wrap(buffer.array()) 的副作用

python - Pytest 与线划定的 json

java - 使用 Jersey 和 Jackson 从 JSON 解码 JAXB 带注释的类

heroku - SQLException : Timed out waiting for a free available connection