@CrossOrigin 注解适用于 Rest Controller 的一种方法,但不适用于第二种方法
@CrossOrigin Annotation works on one method of the Rest Controller , but doesn't apply for the second one
简短说明。我正在尝试在我的后端设置一些休息端点,并从我的前端调用它们。
我有两个相同的方法(除了路径不同),一个没有问题,但是较新的方法在部署后在任何浏览器上被 CORS 策略阻止(AppEngine)。当然我是在本地测试的,但是用的是Postman,大家都知道它不受CORS策略的限制。
我把代码留在下面,但我不明白一个是如何工作的,另一个被阻止了。
套餐com.sjww.SecurityJobsWorldWide.controller;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.sjww.SecurityJobsWorldWide.model.ContactModel;
import com.sjww.SecurityJobsWorldWide.model.NewsletterModel;
import com.sjww.SecurityJobsWorldWide.service.EmailService;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin
public class EmailController {
private final EmailService emailService;
public EmailController(EmailService emailService) {
this.emailService = emailService;
}
@PostMapping(value = "/sendContactMail", consumes = "application/json")
public String sendMail(@RequestBody ContactModel contactModel) throws UnirestException {
emailService.sendContactMessage(contactModel);
return new JSONObject()
.put("message", "SUCCESS!")
.toString();
}
@PostMapping(value = "/addOnRegistration", consumes = "application/json")
public String addToNewsletterList(@RequestBody NewsletterModel newsletterModel) throws UnirestException {
emailService.addListMember(newsletterModel.getEmail());
return new JSONObject()
.put("message", "Added to newsletter!")
.toString();
}
}
我尝试在每个方法上移动 CrossOrigin 注释,但没有。我试图准确说明哪个起源但同样的故事适用。一个有效,另一个无效。
所以 sendEmail() 是旧的。 addToNewsletterList 是新的,但由于 CORS 而不起作用。
“No 'Access-Control-Allow-Origin' header is present on the requested resource”
错误
我不得不提一下,我没有 class 的 WebMvc 配置,我试图在其中设置某种规则。只是这个控制器和更多带有相同注释@CrossOrigin 的控制器,但只是这个方法不起作用。
提前致谢。
我找到了“错误”。
问题是我按如下方式执行 http post 请求:
this.httpClient.post<any>("SERVER_URL", "{email: " + result.user.email + "}").subscribe
意思是我忘了从前端添加这部分:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
并添加如下参数
this.httpClient.post<any>("SERVER_URL", "{email: " + result.user.email + "}", httpOptions).subscribe
简短说明。我正在尝试在我的后端设置一些休息端点,并从我的前端调用它们。
我有两个相同的方法(除了路径不同),一个没有问题,但是较新的方法在部署后在任何浏览器上被 CORS 策略阻止(AppEngine)。当然我是在本地测试的,但是用的是Postman,大家都知道它不受CORS策略的限制。
我把代码留在下面,但我不明白一个是如何工作的,另一个被阻止了。
套餐com.sjww.SecurityJobsWorldWide.controller;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.sjww.SecurityJobsWorldWide.model.ContactModel;
import com.sjww.SecurityJobsWorldWide.model.NewsletterModel;
import com.sjww.SecurityJobsWorldWide.service.EmailService;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin
public class EmailController {
private final EmailService emailService;
public EmailController(EmailService emailService) {
this.emailService = emailService;
}
@PostMapping(value = "/sendContactMail", consumes = "application/json")
public String sendMail(@RequestBody ContactModel contactModel) throws UnirestException {
emailService.sendContactMessage(contactModel);
return new JSONObject()
.put("message", "SUCCESS!")
.toString();
}
@PostMapping(value = "/addOnRegistration", consumes = "application/json")
public String addToNewsletterList(@RequestBody NewsletterModel newsletterModel) throws UnirestException {
emailService.addListMember(newsletterModel.getEmail());
return new JSONObject()
.put("message", "Added to newsletter!")
.toString();
}
}
我尝试在每个方法上移动 CrossOrigin 注释,但没有。我试图准确说明哪个起源但同样的故事适用。一个有效,另一个无效。
所以 sendEmail() 是旧的。 addToNewsletterList 是新的,但由于 CORS 而不起作用。
“No 'Access-Control-Allow-Origin' header is present on the requested resource”
错误
我不得不提一下,我没有 class 的 WebMvc 配置,我试图在其中设置某种规则。只是这个控制器和更多带有相同注释@CrossOrigin 的控制器,但只是这个方法不起作用。
提前致谢。
我找到了“错误”。
问题是我按如下方式执行 http post 请求:
this.httpClient.post<any>("SERVER_URL", "{email: " + result.user.email + "}").subscribe
意思是我忘了从前端添加这部分:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
并添加如下参数
this.httpClient.post<any>("SERVER_URL", "{email: " + result.user.email + "}", httpOptions).subscribe