Spring服务器无法从FetchAPI获取数据错误403

问题描述 投票:0回答:1

我有这样的功能可以从我的表单中检索数据并将它们发送到 Spring Boot 服务器

function saveDataToStorage(event){
            event.preventDefault();
            let name = document.getElementById('imie').value;
            let email = document.getElementById('email').value;
            let phone = document.getElementById('telefon').value;
            let topic = document.getElementById('temat').value;
            let message = document.getElementById('wiadomosc').value;
            let data = {
                name: name,
                email: email,
                phoneNumber: phone,
                topic: topic,
                text: message
            }

            fetch('http://localhost:8080/api/endpoint',{
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify(data),
            })
                .then(response => response.json())
                .then(data => {console.log('Success:',data);})
                .then(error => {console.log('Error:',error);});

            document.getElementById('imie').value = '';
            document.getElementById('email').value = '';
            document.getElementById('telefon').value = '';
            document.getElementById('temat').value = '';
            document.getElementById('wiadomosc').value = '';
        }

还有 FormData 类

@Data
@AllArgsConstructor
public class FormData {
    String name;
    String email;
    String phoneNumber;
    String topic;
    String message;
}

POST 端点

@PostMapping("/api/endpoint")
    public ResponseEntity<String> receiveData(@RequestBody FormData data){
        log.info(data.getName()+" "+data.getEmail()+" "+data.getPhoneNumber()+" "+data.getTopic()+" "+data.getMessage());
        return ResponseEntity.ok("data recieved");
    }

当我在网站上提交表单数据时,我收到这样的错误

加载资源失败:服务器响应状态为403()

在 Spring 应用程序控制台中我没有任何错误

我已尝试添加对此端点的安全配置授权

http.authorizeHttpRequests(authz->authz .requestMatchers("/api/endpoint").permitAll()

但这并没有改变任何事情

javascript java spring spring-boot fetch-api
1个回答
0
投票

也许缺少跨域请求(CORS)配置?如果没有看到控制器的类级注释,很难判断。

如果是,请尝试在控制器中的类声明上方添加

@CrossOrigin("*")
@CrossOrigin(origins = "[origin address]")
注释。注意:生产中不得使用通配符交叉源。

© www.soinside.com 2019 - 2024. All rights reserved.