当前位置: 首页 > 知识库问答 >
问题:

Spring MVC-AngularJS中的PUT方法HTTP状态400

骆嘉石
2023-03-14

company.js

  $scope.updateCompany = function (updateCompanyForm) {
        if (!updateCompanyForm.$valid) {
            $scope.displayValidationError = true;
            return;
        }
        $scope.lastAction = 'update';
        var url = '/Jobkreisel/protected/company/' + $scope.company.companyID;


        var config = {};

        alert("Company scope "+$scope.company.companyID);
        alert("Company config "+config);

        $http.put(url, $scope.company, config)
            .success(function (data) {

                alert('In update success');
            })
            .error(function(data, status, headers, config) {

                console.debug(data);
                alert('data:' + data);
                alert('status: ' + status); 

                alert('update error');
            });
    };

CompanyController.java

@Controller
@RequestMapping(value = "/protected/company")
public class CompanyController extends UserBaseController {

    @Autowired
    private CompanyService companyService;

    @RequestMapping(value = "/{companyID}", method = RequestMethod.PUT, produces = "application/json")
    public ResponseEntity<?> update(@PathVariable("companyID") int companyId,
                                    @RequestBody Company company,                                    
                                    Locale locale) {
        if (companyId != company.getCompanyID()) {
            return new ResponseEntity<String>("Bad Request", HttpStatus.BAD_REQUEST);
        }

        companyService.save(company);

        return null;
    }
}

请告诉我为什么不执行成功块。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ">

    <!-- Spring servlet that will handle the requests-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/spring.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- Spring basic configurations -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/spring.xml
        </param-value>
    </context-param>

    <!-- Spring Security -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Enconding helper filter -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <servlet-name>dispatcher</servlet-name>
    </filter-mapping>

    <!-- Encoding utility -->
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
            <trim-directive-whitespaces>true</trim-directive-whitespaces>
        </jsp-property-group>
    </jsp-config>
</web-app>

共有1个答案

阎枫涟
2023-03-14

web.xml不完整:实际上,您需要/jobkreisel/*控制器的servlet映射。

只需替换spring dispatcher的 标记,如下所示:

<!-- Spring servlet that will handle the requests-->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    ...
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/Jobkreisel/*</url-pattern>
</servlet-mapping>

如果dispatcher的映射正确,您还可以更改从angular应用程序调用的url:

    var url = '/protected/company/' + $scope.company.companyID;
 类似资料:
  • 好的,我在运行我的应用程序时遇到了这个问题,我相信这是因为版本控制。 秋季开始,我使用Tomcat 9.0.4。我使用最新的JavaSDK。 现在,我使用的是Spring版本5.0.2。 这是我的pom。xml: 这是我的web.xml: 这是我的调度器servlet。xml: 现在,我想提一件事:看看那些?我不确定这是否正确。为什么?这就是我在输出中得到的错误: 现在,我知道这是一大段文字,你可

  • 我有以下控制器: 13-feb-2016 16:55:09.442警告[http-apr-8080-exec-9]org.springframework.web.servlet.PageNotFound.HandleHttpRequestMethodNotSupported请求方法“Put”不受支持 我不明白这怎么可能。下面是我的依赖项: 编辑2: 2016-02-14 12:30:56 DEBU

  • 问题内容: 我正在为JSON运行$ http.get,并且状态为0。我已经下载了相同的JSON,并且get在本地运行,并且在Python中使用请求库可以毫无问题地获取JSON,但是在AngularJS它不起作用。我不明白的是为什么为什么angular没有得到它,而其他所有东西都得到了。下面的代码段。 这提供了JSON并在使用本地文件时对其进行了解析,但否则会失败,并将status1设置为0。 问题

  • 我正在尝试将REST用于一些小操作。 获取操作和发布操作工作正常,只有PUT操作给我带来问题。 我正在使用2个调度员(一个映射到“/rest/”,一个映射到“/web/”,据我所知,我的配置文件是正确的(否则其余的也不会工作?)。 为了测试,我使用了一个名为Postman btw的chrome插件。 目前我只使用一个rest控制器: 正如我之前所说,GET请求有效,但PUT返回404。 编辑:gl

  • 我正在使用Jersey开发RESTAPI。我需要添加一个方法,但它会引发异常。 这就是我现在尝试添加的方法: 在现实中,方法中有更多的内容,但内容并不重要。当类中存在此方法时,我在尝试访问服务器时会得到以下异常: 类中还有其他方法可以正常工作,但是当我添加这个新方法时,一切都停止了工作。 这是我网站的内容。xml文件: 如果我将注释更改为并删除注释,则一切正常。为什么我不能添加一个新的?

  • 这是我在SpringMVC中使用Maven的第一个应用程序。下面是应用程序结构。 控制器代码: 当我点击index.jsp中的链接时,页面应该被遍历到helloworld.jsp