在邮递员上发布请求但不在浏览器中(代码状态:415) - Spring Boot,thymeleaf

Posted

技术标签:

【中文标题】在邮递员上发布请求但不在浏览器中(代码状态:415) - Spring Boot,thymeleaf【英文标题】:Post request work on postman but not in browser (CodeStatus : 415) - SpringBoot, thymeleaf 【发布时间】:2022-01-22 21:59:18 【问题描述】:

有点遗憾,但我刚开始做前端开发。

我的问题:我有一个带有表单的 html 页面,并且提交请求正文没有传输到后端。

我正在使用 spring boot、spring security、thymeleaf。

这里是控制器:

RegistrationController java 类

package my.package;

import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(path = "/registration")
@AllArgsConstructor
public class RegistrationController 

    private RegistrationService registrationService;

    @PostMapping
    public  String register(@RequestBody RegistrationRequest request)

        registrationService.register(request);

        return "Registration need to be confirmed";
    

    @GetMapping(path = "confirm")
    public String confirm(@RequestParam("token") String token) 
        return registrationService.confirmToken(token);
    


使用 PostMan,请求作为 Post 请求,正文为 json:


    "firstName": "firstName",
    "lastName": "lastName",
    "email": "firstName.lastName@gmail.com",
    "password": "password"

但是当我按如下方式实现 html 页面时:

<!DOCTYPE html>
<html lang="fr" xmlns:th="https://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>registration page</title>
</head>
<body>
    <div>
                    <form th:action="@/registration" method="post">
                        <div>
                            <input type="text" name="firstName" id="firstName">
                        </div>
                        <div>
                            <input type="text" name="lastName" id="lastName">
                        </div>
                        <div>
                            <input type="email" name="email"  id="email">
                        </div>
                        <div>
                            <input type="password" name="password" id="password">
                        </div>
                        <div>
                            <input type="submit" value="Submit">
                        </div>
                    </form>
    </div>
</body>
</html>

并填写公式并按提交业务服务不成功:得到 415 状态错误

使用 DevTools,我看到负载很好地填充

我不明白为什么@RequestBody 没有填充有效负载数据。也许问题出在其他地方。 我不明白为什么在邮递员中请求有效但在浏览器中无效

感谢您提供的所有帮助

亚历克斯

【问题讨论】:

***.com/questions/54065603/… 感谢您的链接,现在需要明确的是,@RequestBody 不适用于表单有效负载数据。需要稍微回顾一下我的后端 【参考方案1】:

相反,在表单提交时进行 AJAX 调用。 确保您的表单有 ID

<form id="form-id" method="post">


$( document ).ready(function() 
// SUBMIT FORM
$("#form-id").submit(function(event) 
    // Prevent the form from submitting via the browser.
    event.preventDefault();
    ajaxPost();
);


function ajaxPost()
    
    // PREPARE FORM DATA
    var formData = 
        firstname : $("#firstName").val(),
        lastname :  $("#lastName").val(),
        --------other attributes with values---------
    
    
    // DO POST
    $.ajax(
        type : "POST",
        contentType : "application/json",
        url : "/registration",
        data : JSON.stringify(formData),
        dataType : 'json',
        success : function(result) 
            ----redirect to another url----
            console.log(result);
        ,
        error : function(e) 
            alert("Error!")
            console.log("ERROR: ", e);
        
    );
    
    // Reset FormData after Posting
    resetData();



function resetData()
    $("#firstname").val("");
    $("#lastname").val("");

)

【讨论】:

以上是关于在邮递员上发布请求但不在浏览器中(代码状态:415) - Spring Boot,thymeleaf的主要内容,如果未能解决你的问题,请参考以下文章

将 POST 从 api 转发到另一个时出现错误代码 415

如何在Spring启动应用程序中进行REST调用而不在Spring安全性中禁用CSRF保护?

axios.post 显示错误“请求失败,状态码为 400”,但邮递员发布了相同的数据

Spring Boot REST 多部分请求(文件 + json)抛出 415 Unsupported Media Type 异常

Web Api 2.0 在邮递员中工作但不在 HTML 页面中

伪造Api PATCH请求返回415“不支持的媒体类型”