Java 只返回json中的一些值,而不是完整实体对象

Java 只返回json中的一些值,而不是完整实体对象,java,json,response,Java,Json,Response,我在使用JPA从RESTful应用程序创建响应时遇到问题。这就像一个电影亲和力或imbd网站的模拟 我只想返回电影中的特定值(id、年份、名称)。我还想返回项目搜索的值(如果是电影,电影,是电视剧,系列)。该值不是实体的属性 import com.fasterxml.jackson.annotation.JsonProperty; @Path("/search") @RequestScoped public class SearchRESTService extends RESTService

我在使用JPA从RESTful应用程序创建响应时遇到问题。这就像一个电影亲和力或imbd网站的模拟

我只想返回电影中的特定值(id、年份、名称)。我还想返回项目搜索的值(如果是电影,电影,是电视剧,系列)。该值不是实体的属性

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——这只是返回对象的呈现


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

使用@JsonIgnore忽略电影类中不需要的字段。至于向json添加字段,您只需添加一个返回所需值的方法,它就可以包含在json中。如何修改JSON?但我返回一个响应。如何修改JSON?JSON现在看起来是什么样子?我想你可以做任何你需要的事情,我修改电影类本身,但我也需要看到这一点。最明显的解决方案是使用DTO。但是,如果您不想这样做,可以使用
@JsonTypeInfo
指示Jackson在结果中包含类型信息(您可以向标记有
@JsonProperty
的对象添加一个不可变的临时属性
type
,但是
@JsonTypeInfo
应该可以在不使实体太混乱的情况下工作)
{
     "id": 18926,
     "name": "Titanic",
     "itemType": "Movie",
     "year": 1997
}