如何用Jackson解析接收的JSON,提取电影列表名称及影片ID?
解析JSON并提取电影列表信息的JAX-RS实现方案
我来帮你搞定这个JSON解析的问题,用Jackson配合JAX-RS的自动序列化特性就能轻松解决,咱们一步步来:
1. 创建匹配JSON结构的Java实体类
首先定义和目标JSON结构对应的POJO(普通Java对象),这样Jackson可以直接把JSON请求体映射成Java对象,省去手动解析的麻烦:
// 对应外层的电影列表对象 public class MovieListRequest { private String name; private List<MovieItem> items; // 生成getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public List<MovieItem> getItems() { return items; } public void setItems(List<MovieItem> items) { this.items = items; } } // 对应items数组里的单个电影项 public class MovieItem { private Long id; // 生成getter和setter方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
2. 修改JAX-RS接口方法
你原来手动处理JSON字符串的方式没必要,JAX-RS会自动把请求体的JSON反序列化为咱们定义的MovieListRequest对象。修改后的方法如下:
import java.util.List; import java.util.stream.Collectors; @PUT @Path("/") @Consumes(MediaType.APPLICATION_JSON) public Response deleteMoviesFromList2(@Context HttpServletRequest req, Long movieListId, MovieListRequest movieListRequest) { // 新增该参数,框架自动注入JSON映射后的对象 Long userId = getLoggedUser(req); // 提取列表名称 String listName = movieListRequest.getName(); // 提取所有影片ID List<Long> movieIds = movieListRequest.getItems().stream() .map(MovieItem::getId) .collect(Collectors.toList()); // 根据你的service方法参数调整传入内容,比如把userId、movieListId、movieIds等传进去 return buildResponse(listMovieService.remove(userId, movieListId, movieIds, listName)); }
3. 方案优势
- 简洁可靠:借助框架自动序列化,避免手动解析JSON字符串的繁琐和出错风险
- 可读性强:实体类清晰对应JSON结构,后续维护和修改都更直观
- 扩展性好:如果JSON结构后续有变动,只需要调整实体类即可适配
如果你的listMovieService.remove()方法支持直接接收MovieListRequest对象,直接传进去就行,灵活调整参数即可。
内容的提问来源于stack exchange,提问作者Arnau Van Boschken ArnauB
相关产品推荐
相关产品推荐

