簡體   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