получение нулевого идентификатора для серверной части через URL в контроллере rest

#java #angularjs #spring #rest

#java #angularjs #spring #rest

Вопрос:

Я получаю идентификатор Null для серверной части, который является параметром, передаваемым из интерфейса

     this.overAllSummery = function(offset,limit,search,colName,order,id){

    var url = 'api/dashboard/summary/'

        if(offset!= undefined){
            url=(url.indexOf("?") > -1)?url "amp;offset=" offset:url "?offset=" offset;
        }
        if(limit != undefined){
            url=(url.indexOf("?") > -1)?url "amp;limit=" limit:url "?limit=" limit;
        }
        if(search!=undefined amp;amp; search!=""){
            url=(url.indexOf("?") > -1)?url "amp;search=" search:url "?search=" search;
        }
        if(colName != undefined){
            url=(url.indexOf("?") > -1)?url "amp;colName=" colName:url "?colName=" colName;
        }
        if(order != undefined){
            url=(url.indexOf("?") > -1)?url "amp;order=" order:url "?order=" order;

        }
        if(id != undefined){
            url=(url.indexOf("?") > -1)?url "amp;id =" id:url "?id =" id;
        }
        alert(id);
        var promise = $http({
            method : 'GET',
            url : url,
            headers : {
                'Content-Type' : 'application/json'
            },
            cache : false
        }).then(function (response) {
            return response;
        });
        return promise;     
    };
  

Все вышесказанное относится к интерфейсной службе, использующей AngularJS и передающей URL для вызова серверной части, поскольку я передаю разные параметры, я получаю все это для серверной части, кроме ID, и на основе Id я должен извлекать записи из базы данных.

     @RequestMapping(value = "/summary", method = RequestMethod.GET, produces="application/json")
public ResponseEntity<List<OverAllSummery>> overAllSummery(HttpServletRequest request,@RequestParam(value="offset",required=false) Integer offset,@RequestParam(value="limit",required=false) Integer limit,
@RequestParam(value="search",required=false) String search,@RequestParam(value="colName",required=false) String colName,@RequestParam(value="order",required=false) String order,
@RequestParam(value="id",required=false) Long id){

try {

    return new ResponseEntity<List<OverAllSummery>>(DashbordService.overAllSummery(offset,limit,search,colName,order,id), HttpStatus.OK);
} catch (Exception exception) {
    logger.error("Error retriving all categories", exception);
    return new ResponseEntity<List<OverAllSummery>>(HttpStatus.INTERNAL_SERVER_ERROR);
}
  

Выше приведен контроллер rest, который я использую, вызов передается серверной части в режиме отладки, но идентификатор становится нулевым, и я получаю 404 во внешней консоли.

введите описание изображения здесь

Выше вы можете видеть после добавления URL в оповещение, где ID = 1, но после того, как вызов переходит на серверную часть, этот идентификатор становится нулевым

введите описание изображения здесь

вы можете видеть выше этот идентификатор в API

Комментарии:

1. Пожалуйста, добавьте «Alert (url)» перед выполнением вызова Get call в Rest api, чтобы узнать, что именно передается, на основе этого мы можем выяснить, что вызывает проблему, и найти передаваемое значение.

2. вы можете увидеть вопрос. Я отредактировал, как вы сказали, после использования alert

Ответ №1:

Не могли бы вы, пожалуйста, проверить после удаления этого дополнительного места из вашего URL.В URL-адресах не должно быть пробелов.

Удалите это лишнее пространство

Комментарии:

1. абсолютно правильно, URL не должен содержать пробелов между ними

2. Всегда публикуйте необходимые сведения, чтобы мы могли помочь вам быстрее решить вашу проблему :)@phanikumar

Ответ №2:

Ошибка 404 в HTTP определенно означает, что сервер (серверная часть) не знает URL, к которому вы пытаетесь получить доступ. Внутренняя ошибка сервера, которая вызвана блоком catch, равна HTTP 500, таким образом, серверная часть не создала исключение. Итак, первое, что нужно проверить, это к какому URL вы пытаетесь получить доступ на самом деле. Кстати, попробуйте использовать’/api /dashboard / summary’ вместо того, что используется сейчас во внешней части.

Комментарии:

1. URL и все правильно, вызов выполняется для серверной части через отладку, но в серверной части идентификатор становится нулевым. На самом деле это должно быть значение, которое я передаю через параметр ID

2. Тогда это не 404. Я предлагаю использовать (@RequestParam<Строка, String> параметры) в вашем методе обработчика. Он покажет вам, какие параметры вы передали. Например, если вы используете ‘id’ вместо ‘id’, он, вероятно, не будет сопоставлен автоматически.

Ответ №3:

@RequestMapping(value = "dashboard/summary" ...) вы не добавили идентификатор в качестве параметра в RequestMapping

добавить {id} @RequestMapping(value = "dashboard/summary/{id}" ...)

api, который вы вызываете dashboard/summary/1

Комментарии:

1. если я добавлю идентификатор в сопоставление запроса, это выдаст » Не найдено сопоставления для HTTP-запроса с URI [/ gdpr / api / dashboard / summary /] в DispatcherServlet с ошибкой имени spring-dispatcher», и, как вы упомянули выше, если я передам как » / summary / 1″, это станет жестко закодированным идентификатором

2. 1 — это идентификатор, который вы можете передать что угодно

3. @phanikumar возможно, вы принимаете API неправильно. вы создаете api / summary /, в котором вы вызвали api / панель мониторинга / summary