У меня проблемы с поиском правильного пути для использования в запросах $ http для доступа к @RestController в моем приложении Spring Boot. Я включу соответствующий код ниже, в надежде, что вы увидите то, чего не я. Я прошу прощения, что код не полностью на английском языке, но я думаю, что это будет легко понять.

Вот контроллер остальной части сервера, на который я должен нацелиться:

@RestController
@RequestMapping("/fileData")
public class FileDataService {

    @Autowired
    HttpServletRequest request;
    @Autowired
    ServletContext ctx;

    @RequestMapping(method = RequestMethod.GET,
            value = "fileData/getKorisnici", 
            produces = MediaType.APPLICATION_JSON_VALUE)
    //@ResponseBody
    public Collection<Korisnik> getKorisnici() {
        return getFileData().getKorisnikValues();
    }

    /*@POST
    @Path("/addKorisnik")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)*/
    @SuppressWarnings("rawtypes")
    @RequestMapping(method = RequestMethod.POST,
            value = "/addKorisnik", 
            produces = MediaType.APPLICATION_JSON_VALUE,
            consumes = MediaType.APPLICATION_JSON_VALUE)
    //@ResponseBody
    public ResponseEntity addKorisnik(Korisnik k) {
        if(getFileData().usernameExistsKorisnici(k.getKorisnickoIme())) {
            return ResponseEntity.status(HttpStatus.CONFLICT).build();
        }
        else if(getFileData().emailExistsKorisnici(k.getEmail())) {
            return ResponseEntity.status(HttpStatus.CONFLICT).build();
        }
        getFileData().getKorisnici().put(k.getIdKorisnik(), k);
        getFileData().writeData();
        return ResponseEntity.ok().build();
    }

И вот сторона интерфейса:

app.factory('korisnikFactory', function($http) {

    var factory = {};
    factory.getKorisnici = function() {
        //return $http.get('/drools-spring-v02-app/rest/fileData/getKorisnici');
        return $http.get('/fileData/getKorisnici');
    };

    factory.addKorisnik = function(korisnik) {
        return $http.post('/fileData/addKorisnik', korisnik);
    };

    return factory;

});
0
newdev 21 Авг 2018 в 02:50

3 ответа

Лучший ответ

В вашем приложении Springboot есть аннотация @RequestMapping("/fileData"), определенная над классом FileDataService, поэтому каждый вызов запроса начинается с префикса /fileData/.. автоматически. Там нет необходимости писать это снова, как при получении вызова

@RequestMapping(method = RequestMethod.GET, value = "fileData/getKorisnici", produces = MediaType.APPLICATION_JSON_VALUE)

В то время как в AngularJS должен быть абсолютный путь return $http.get($location.absUrl() + 'fileData/getKorisnici'); (обратите внимание на эти косые черты)

Вы можете сослаться на один из моих демонстрационных проектов на SpringBoot + AngularJS здесь

1
Nikhil Zurunge 27 Авг 2018 в 07:18

Вы допустили небольшую ошибку при формировании URL. В вашем классе вы объявили @RequestMapping("/fileData"), поэтому ваши методы должны следовать по пути, предшествующему этому. Вы не должны снова включать value = "fileData/getKorisnici".

Просто попробуйте исправить это до value = "/getKorisnici", все будет работать нормально.

Ничего не должно быть изменено в вашей передней части.

1
Hema 21 Авг 2018 в 07:08

Я полагаю, что ваш относительный URL-адрес может быть неправильным здесь. Во-первых, попробуйте получить полный путь к вашему приложению весенней загрузки и попробуйте использовать RestClient или Postman, чтобы проверить, нормально ли работает приложение весенней загрузки для запросов GET и POST. После этого вернитесь к своему Angular и попробуйте $ http.get ([your-full-url '), если это сработает, вы сможете обновить относительный URL.

1
Jayesh 21 Авг 2018 в 02:34
51939862