栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JAX-RS异常:用资源的GET注释,该类未被识别为有效的资源方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAX-RS异常:用资源的GET注释,该类未被识别为有效的资源方法

JAX-RS无法自动将@PathParam(它是一个字符串值)转换为Employee对象。可以从@PathParam自动创建的对象的要求是:

  1. 字符串(事实上,因为数据已经是字符串)
  2. 具有接受(单个)字符串作为参数的构造函数的对象
  3. 具有静态valueOf(String)方法的对象
    对于情况2和3,将需要该对象解析字符串数据并填充其内部状态。通常不会这样做(因为这会迫使您对数据的内容类型进行假设)。对于您的情况(刚开始学习JAX-RS),最好只接受传入的@PathParam数据作为String(或Integer或Long)。
@GET@Path("/emp/{id}")public Response getEmpDetails(@PathParam("id") String empId) {    return Response.status(200).entity(empId).build();}

用GET方法将复杂的对象表示传递给REST服务没有多大意义,除非将其用作例如搜索过滤器。根据您的反馈,这就是您想要做的。实际上,我之前已经在一个项目上执行过此操作(搜索过滤器的通用实现),其中一个警告是您需要严格定义搜索数据的格式。因此,让我们将JSON定义为可接受的格式(您可以根据需要将示例修改为其他格式)。“搜索对象”将作为称为的查询参数传递到服务filter。

@GET@Path("/emp")public Response getEmployees(@QueryParam("filter") String filter) {    // The filter needs to be converted to an Employee object. Use your    // favorite JSON library to convert. I will illustrate the conversion    // with Jackson, since it ships with Jersey    final Employee empTemplate = new ObjectMapper().readValue(filter, Employee.class);    // Do your database search, etc, etc    final String id = getMatchingId(empTemplate);    // return an appropriate response    return Response.status(200).entity(id).build();}

在客户类中:

final String json = new ObjectMapper().writevalueAsString(emp);service    .path("rest")    .path("emp")    .queryParam("filter", json)    .accept(emp, MediaType.TEXT_PLAIN)    .get(String.class)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428374.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号