在Spring Boot App中找不到AngularJS $ http路径404

时间:2018-08-20 23:50:29

标签: angularjs spring rest spring-boot

我无法找到在$ http请求中使用的正确路径,以便在我的Spring Boot应用程序中访问@RestController。我将在下面包含相关代码,希望您能看到一些我不是的东西。抱歉,该代码不是完全用英语编写的,但是我认为这很容易理解。

这是我应该定位的后端rest控制器:

@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;

});

3 个答案:

答案 0 :(得分:1)

我相信您的相对网址在这里可能是错误的。首先,尝试获取您的Spring Boot应用程序的完整路径,并尝试使用RestClient或Postman来查看Spring Boot应用程序对于GET和POST请求是否都能正常工作。完成此步骤后,返回Angular尝试$ http.get([your-full-url'),如果可以解决问题,则可以更新相对URL。

答案 1 :(得分:1)

在您的springboot应用程序中,在类@RequestMapping("/fileData")上方定义了一个注释FileDataService,因此每个请求调用都会自动以/fileData/..为前缀。无需像在get呼叫中那样再次编写

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

在AngularJS中应该有绝对路径return $http.get($location.absUrl() + 'fileData/getKorisnici'); (注意那些斜线)

您可以在SpringBoot + AngularJS here

上引用我的一个演示项目。

答案 2 :(得分:1)

您在URL格式方面犯了一个小错误,在您的类中,您已经声明了@RequestMapping("/fileData"),因此您的方法应遵循此方法之前的路径。 您不应再包含value = "fileData/getKorisnici"

只需尝试将其更正为value = "/getKorisnici",一切都会正常。

前端没有任何改变。