【问题标题】:error 404 during use web service Java - angular使用 Web 服务 Java 期间出现错误 404 - 角度
【发布时间】:2015-03-18 18:24:20
【问题描述】:

当我在 firebug 的控制器中使用 JSON 将 obiect 从 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;
    }

【问题讨论】:

  • 你能展示你的js代码吗?
  • 我发现 Chrome + Postman extension 非常适合调试 HTTP。
  • 是的,我可以。我放了JS代码。

标签: java javascript json angularjs


【解决方案1】:

您可能正在从 localhost:3000 或其他端口运行 Angular 应用程序,并从 localhost:8080 运行 Java Web。这意味着您需要发出“跨站点”请求,这通常是出于安全目的而被阻止的。

您需要在 Web 应用上配置 CORS。这可以通过添加库和配置 web.xml 轻松完成。在这里阅读更多:http://software.dzhuvinov.com/cors-filter.html

如果您使用的是 maven,只需添加此依赖项:

<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 对我的网络应用程序中 /api 路径下的任何 URL 进行 GET、POST、HEAD、PUT、DELETE 和 OPTIONS 请求。

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多