#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