繁体   English   中英

没有找到接口 javax.ws.rs.core.UriInfo 的主要或单个公共构造函数 - 也没有找到默认构造函数

[英]No primary or single public constructor found for interface javax.ws.rs.core.UriInfo - and no default constructor found either

我有一个休息控制器

@RestController
@RequestMapping(APIConstants.API_BASE_URI + APIConstants.MYCONTROLLER)
public class MyController extends APIRESTResource {

   @Context
   UriInfo uriInfo;

   @GetMapping({"/activate"})
   public ResponseEntity<String> activateAccount(@PathVariable("service") String srvc, @Context UriInfo info) {
      HttpStatus status = HttpStatus.OK;
      MediaType type = MediaType.TEXT_PLAIN;
      String payload = "Activated";

      try {
         List<Long> accountIdList = extractAccountIdsAsList(info);

         String datasource = getDatasourceForService(srvc);
         AccountsServiceImpl mgr = new AccountsServiceImpl(datasource);
         mgr.activateAccounts(accIdList);

         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(type);
         return new ResponseEntity<>(payload, headers, status);
      }
      catch (Exception ex) {
         return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
      }
   }

}

在哪里

   private List<Long> extractAccountIdsAsList(UriInfo info) throws Exception {
      String fieldName = "accId";
      String accIdStr = info.getQueryParameters().getFirst(fieldName);
      validateRequiredField(fieldName, accIdStr);

      accIdStr = accIdStr.replace(" ", ""); // remove any spaces...

      String[] accIds = null;
      if (accIdStr.contains(",")) {
         accIds = accIdStr.split("\\,");
      }
      else {
         accIds = new String[1];
         accIds[0] = accIdStr;
      }

      List<Long> accIdList = new ArrayList<Long>();
      for (int i = 0; i < accIds.length; i++) {
         validateFieldValueType(fieldName, accIds[i], Long.TYPE);
         Long accId = new Long(accIds[i]);
         accIdList.add(accId);
      }

      return accIdList;
   }

但这将失败并出现错误

没有找到接口 javax.ws.rs.core.UriInfo 的主要或单个公共构造函数 - 也没有找到默认构造函数

甚至没有到达那个控制器。 @GetMapping的任何其他控制器都可以正常工作,但只有带有@Context的控制器失败了。

如果您有任何问题,请发布解决方案

正如上面保罗在评论中提到的,遗留代码在控制器代码中混合了 JAX-RS 和 Spring MVC,我不知道它到目前为止是如何工作的(可能是因为在 Java6/7 上运行?)但我的解决方案是使用@RequestParam而不是@Context ,因为 Spring MVC 中没有URIInfo的等价物,代码将如下所示:

@RestController
@RequestMapping(APIConstants.API_BASE_URI + APIConstants.MYCONTROLLER)
public class MyController extends APIRESTResource {

   @Context
   UriInfo uriInfo;

   @GetMapping({"/activate"})
   public ResponseEntity<String> activateAccount(@PathVariable("service") String srvc, @RequestParam String accId) {
      HttpStatus status = HttpStatus.OK;
      MediaType type = MediaType.TEXT_PLAIN;
      String payload = "Activated";

      try {
         List<Long> accountIdList = extractAccountIdsAsList(accId);

         String datasource = getDatasourceForService(srvc);
         AccountsServiceImpl mgr = new AccountsServiceImpl(datasource);
         mgr.activateAccounts(accIdList);

         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(type);
         return new ResponseEntity<>(payload, headers, status);
      }
      catch (Exception ex) {
         return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
      }
   }

}

在哪里

   private List<Long> extractAccountIdsAsList(String accIdStr) throws Exception {
      String fieldName = "accId";
      validateRequiredField(fieldName, accIdStr);

      accIdStr = accIdStr.replace(" ", ""); // remove any spaces...

      String[] accIds = null;
      if (accIdStr.contains(",")) {
         accIds = accIdStr.split("\\,");
      }
      else {
         accIds = new String[1];
         accIds[0] = accIdStr;
      }

      List<Long> accIdList = new ArrayList<Long>();
      for (int i = 0; i < accIds.length; i++) {
         validateFieldValueType(fieldName, accIds[i], Long.TYPE);
         Long accId = new Long(accIds[i]);
         accIdList.add(accId);
      }

      return accIdList;
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM