java - 尝试修复 CORS 问题后,Spring Boot 出现 400 问题
问题描述
在我尝试使用 spring boot 修复如下 CORS 问题后,我收到了 400 错误请求问题
嵌套异常是 com.fasterxml.jackson.core.JsonParseException Unrecognized token 'assessmentLevel': was expecting ('true', 'false' or 'null')\n at [Source: (PushbackInputStream); 行:1,列:17]","路径":"/assessments/createAssessment"}
Cors过滤器:
public class CorsFilter extends GenericFilterBean implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "false");
response.setHeader("Access-Control-Max-Age", "3600");
filterChain.doFilter(servletRequest, servletResponse);
}
}
控制器:
@RequestMapping(method = RequestMethod.POST, path ="createAssessment")
@ResponseBody
public String createAssessment(@RequestBody AssessmentRequest assessmentRequest) {
return assessmentService.addAssessment(assessmentRequest);
}
过滤器配置:
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter(){
FilterRegistrationBean<CorsFilter> registrationBean
= new FilterRegistrationBean<>();
registrationBean.setFilter(new CorsFilter());
registrationBean.addUrlPatterns("/assessments/*");
registrationBean.setOrder(1);
return registrationBean;
}
请求的请求负载:
assessmentLevel=sa&assessmentSubTopic=asd&assessmentTopic=asdf&createdBy=d&rating=1
请求正文:
public class AssessmentRequest {
private String assessmentTopic;
private String assessmentSubTopic;
private String createdBy;
private String rating;
private String assessmentLevel;
//Getter and setters
}
AJAX 调用
$.ajax({
url : 'http://localhost:8080/assessments/addAssessment',
dataType : 'json',
type : 'POST',
contentType: "application/json",
beforeSend : function (xhr) {
xhr.setRequestHeader('Accept', '*/*');
xhr.setRequestHeader('Content-Type', 'application/json');
},
data : {
'assessmentTopic' : $('.assessment-topic').val(),
'assessmentSubTopic' : $('.assessment-sub-topic').val(),
'createdBy' : $('.assessment-creator').val(),
'rating' : $('.assessment-rating').val(),
'assessmentLevel' : $('.assessment-level').val()
},
success : function (response) {
assessmentId = response;
$('.choose-file').removeClass('hidden');
$('.form-control').attr('disabled', true);
$('.create-assessment-button').attr('disabled', true);
},
error : function (xhr, status, error) {
alert('failed');
}
});
解决方案
推荐阅读
- delphi - 我如何在 delphi 中使用 TRect 来绘制角度?
- c# - 找出随机值为 1-6 的至少 6 个浮点数是否具有相同值的最简单方法是什么(在 c# 中)
- google-apps-script - 在电子表格中列出 Google Drive 文件夹中的文件
- python - 有效的正则表达式,用于减少 Python 中由特定分隔符分隔的完全重复的短语
- android - 无法从形状为 [1, 3087, 2] 的 TensorFlowLite 张量 (Identity_1) 复制到形状为 [1, 3087] 的 Java 对象
- postgresql - 是否可以在 Informatica Powercenter SQL Workbench 消息窗格中输出注释?
- ethereum - 使用 web3.js 发送 signTransaction。但我无法在 ganache 中确认这笔交易
- javascript - MySQL | 计数行 IF 0 然后返回
- xcode - 将胖库添加到 XCFramework 在 Xcode 12 中不起作用
- java-8 - Java 8 GroupBy 并将结果转换为列表