【问题标题】:Return only some values in json instead full entity object仅返回 json 中的一些值而不是完整的实体对象
【发布时间】:2018-04-29 16:01:25
【问题描述】:

我在 JPA 中从我的 RESTful 应用程序创建响应时遇到问题。这就像对 Filmaffinty 或 imbd 网站的模拟。

我只想返回电影中的具体值(id、年份、名称)。我还想返回项目搜索的值(如果是电影,MOVIE,是 tv_show,SERIE)。该值不是来自实体的属性。

import com.fasterxml.jackson.annotation.JsonProperty;
@Path("/search")
@RequestScoped
public class SearchRESTService extends RESTService {

@EJB
MovieService ms;

@EJB
ListMovieService lms;

@EJB
SeriaService ss;

@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)

public Response search(@Context HttpServletRequest req) {
    if (!checkLoggedIn(req)) {
        throw new WebApplicationException("User not logged.");
    }
    String name = req.getParameter("n_name");
    String typeFilter = req.getParameter("movie");
    SearchResult sr = new SearchResult();
    sr.movies = ms.getAllMovies();
    switch (typeFilter){
        case "movie":
            sr.movies = ms.getMovieByName(name);
            break;
        /*case "tv_show":
            sr.series = ms.getSeriesByName(name);
            break;
            */

    }

    return buildResponse(sr);
}
static class SearchResult {
    @JsonProperty("Movies")
    Collection<Movie> movies;
    @JsonProperty("List_Movies")
    Collection<ListMovie> listMovies;
    @JsonProperty("Series")
    Collection<Seria> series;
}
}

是否可以向 JSON 添加“新值”。我的意思是,我有类电影,我想返回到 JSON 项目搜索的类型。示例:如果我搜索电影,JSON 必须返回 itemType = movie,如果是 tv_show,itemType = serie

例如,如果我搜索泰坦尼克号,这应该是我的 JSON:

{
     "id": 18926,
     "name": "Titanic",
     "itemType": "Movie",
     "year": 1997
}

【问题讨论】:

  • 使用@JsonIgnore 忽略电影类中不需要的字段。至于向 json 中添加字段,您可以简单地添加一个返回所需值的方法,它可以包含在您的 json 中。
  • 但我返回一个响应。如何修改 JSON?
  • 但我返回一个响应。如何修改 JSON?
  • JSON 现在是什么样子的?我认为您可以完成我修改 Movie 类本身所需的大部分工作,但我也需要看到这一点。
  • 最明显的解决方案是使用 DTO。但是,如果您不希望这样,您可以指示 Jackson 使用 @JsonTypeInfo 在结果中包含类型信息(您可以将不可变的瞬态属性 type 添加到标有 @JsonProperty 的对象中,但 @JsonTypeInfo应该不会让你的实体过于混乱)

标签: java json response


【解决方案1】:

不要修改 JSON - 这只是返回对象的呈现。

相反,返回不同的对象类型,可能是SearchResult 对象。根据需要创建、填充、修改它,然后让 JSON 库完成它的工作。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多