Controller的HTTP Status 400错误问题

SpringMVC使用JSON做请求数据和@RequestBody直接存入Java实体类对象出现400问题

错误代码如下:
<!doctype html>

HTTP Status 400 – Bad Request

HTTP Status 400 – Bad Request


Type Status Report

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).


出现此问题可能原因

请求的JSON数据格式出现错误,正确JSON的格式如下:
{
“id”:“id”,
“username”: “usernameValue”,
“password”: “passwordValue”
}
要跟其接收的实体类保持一致(相关实体类和Controller如下)

//User实体类
public class User {
    int id;
    String username;
    String password;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
//接收前端JSON的Controller
	@ResponseBody
    @RequestMapping(value = "test",method = RequestMethod.POST)
    public User test(@RequestBody User user) {
        System.out.println(user);
        return user;
    }
### HTTP 405 Method Not Allowed 错误的原因和解决方案 HTTP 405错误表示服务器配置不允许请求所使用的HTTP方法。这种错误通常发生在客户端尝试使用不被允许的方法访问资源时,例如通过`DELETE`或`PUT`方法访问仅支持`GET`和`POST`的API端点。 #### 原因分析 1. **Web服务器配置问题**: Web服务器可能未正确配置以处理某些HTTP方法。例如,在IIS中,默认情况下可能会禁用一些RESTful API所需的方法(如`DELETE`, `PUT`)。 2. **路由设置不当**: 如果应用程序中的路由定义未能匹配到相应的控制器动作或者缺少特定于方法的支持声明,则可能导致此错误发生[^1]。 3. **防火墙或代理限制**: 中间件如反向代理、负载均衡器甚至公司内部网络的安全设备也可能拦截并阻止非标准HTTP动词的流量。 #### 解决方案 - **调整Web Server Settings** 对于运行在Windows环境下的ASP.NET应用来说,确保IIS已启用所有必要的HTTP verbs是非常重要的一步。可以通过修改applicationHost.config文件来实现这一点: ```xml <configuration> <system.webServer> <security> <requestFiltering allowVerb="true"> <!-- Add additional verbs here --> </requestFiltering> </security> </system.webServer> </configuration> ``` - **修正Application Routes & Controller Actions** 如引用所示例子那样,在Controller类里明确指定支持哪些Http Methods以及对应的路径模板可以有效解决问题。比如下面这个针对删除操作的例子就很好地展示了如何利用Attribute Routing机制让Delete Scan功能正常工作: ```csharp [Route("api/scan/{id}")] [ResponseType(typeof(Scan))] public IHttpActionResult DeleteScan(int id) { var scan = db.Scans.Find(id); if (scan == null){ return NotFound(); } db.Scans.Remove(scan); db.SaveChanges(); return Ok(scan); } ``` 以上代码片段显示了一个典型的基于属性的路由方式,它明确规定了哪个URL模式应该映射到具体的Action上,并且指定了该action期望接收的数据类型[^1]. - **审查中间层组件行为** 需要确认是否有任何中介软件正在过滤掉这些特殊的http methods。如果是这样的话,就需要相应地更改其策略以便放行所需的verbs. 综上所述,解决HTTP 405错误的关键在于仔细检查整个请求链路——从最初的web server setup一直到最终的应用逻辑层面——找出哪里存在对于特定method的约束条件,并采取适当措施予以解除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值