使用web服务Java-angular时出现错误404

error 404 during use web service Java - angular

本文关键字:错误 web 服务 Java-angular 使用      更新时间:2023-09-26

当我在firebug的控制器中使用JSON将obect从angular发送到java控制器时,显示错误404。这意味着angular找不到这个路径,但java中的后端收到了这个消息。问题是因为我无法将消息回复到angular。

这是json:

{"title":"sdtgb","authors":[{"author_id":60,"author":"Brandon Sanderson"}],"genres":[{"genre_id":14,"genre":"Satyra"}],"description":"sdtb","path_image":"19674.png"}

java控制器:

@SuppressWarnings("finally")
    @RequestMapping(value = "/rest/book", method = RequestMethod.POST)
    public MessageDTO addNewBook(@RequestBody BookDTO newBook) {
        MessageDTO message = new MessageDTO();
        try {
            bookService.addNewBook(newBook);
            message.setCheck(true);
        } catch (BookTitleException e) {
            message.setCheck(false);
            message.setDescription("Ksiązka o tym tytule juz istnieje.");
            e.printStackTrace();
        } finally{
            return message;
        }
    }

这是从萤火虫角度发送消息和错误时的路径:

"NetworkError: 404 Not Found - http://localhost:8080/engineering-project-web/rest/book"

BookDTO:

public class BookDTO implements Serializable{
    private static final long serialVersionUID = -5057364006691079475L;
    private AuthorEntity [] authors;    
    private String description; 
    private GenreEntity [] genres;  
    private String title;
    private String path_image;
    /* getters and setters */
}

Java脚本:

控制器:

var book = {
            title : $scope.title,
            authors : $scope.author,
            genres : $scope.genre,
            description : $scope.description,
            path_image: null
        }
NewBookFct.addNewBook(book)
                .then( function(resolve){
                    if(resolve.check){
                        alert("Ksiazka została dodana.");
                    }else{
                        alert(resolve.description);
                    }
                }, function(reason){
                    console.log(reason);
                });

服务:

service.addNewBook = function(book){
        var deferred = $q.defer();
        bookResource.save(book)
            .$promise.then( function(data){
                deferred.resolve( data );
            }, function(){
                deferred.reject("Error during adding new book.");
            });
        return deferred.promise;
    }

有问题的是,您正在从localhost:3000或其他端口运行Angular应用程序,并从localhost:8080运行Java Web。这意味着你需要提出一个"跨站点"请求,这通常是出于安全目的而被阻止的。

您需要在web应用程序上配置CORS。这可以通过添加库和配置web.xml轻松完成。点击此处了解更多信息:http://software.dzhuvinov.com/cors-filter.html

如果你正在使用maven,只需添加这个dependency:

<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>2.5</version>
</dependency>

然后在你的web.xml中添加这样的内容:

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, PUT, DELETE, OPTIONS</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/api/*</url-pattern>
</filter-mapping>

在上面的配置中,我允许CORS对我的web应用程序中/api路径下的任何URL进行GET、POST、HEAD、PUT、DELETE和OPTIONS请求。