2016-06-16 7 views
1

У меня есть следующий классSpringBoot и @CrossOrigin аннотаций с POST только

@RestController 
@RequestMapping("/bets") 
@CrossOrigin 
public class BetRestController { 

    @Autowired 
    private BetController betController; 

    @ResponseBody 
    @RequestMapping(method=RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
    public BetResource betOnGame(@RequestBody @Valid BetResource betResource) { 
     return BetTranslator.from(betController.betOnGame(BetTranslator.from(betResource))); 
    } 

    @ResponseBody 
    @RequestMapping(method = RequestMethod.GET) 
    public List<BetResource> getAllBets() { 
     return betController.getAllBets().stream().map(BetTranslator::from).collect(Collectors.toList()); 
    } 
} 

Проблема заключается в том, что при попытке доступа к методу POST я получаю:

XMLHttpRequest не может загрузить http://localhost:8080/bets. Происхождение http://localhost:3000 не разрешено Access-Control-Allow-Origin.

но GET способ работы.

В чем я ошибаюсь в своей конфигурации или, возможно, есть ошибка в обработке @CrossOrigin аннотации ?!

+0

Вы можете разместить заголовки запроса и ответа HTTP (от Сеть)? – Hareesh

ответ

1

Если я правильно понимаю вашу проблему, можно указать происхождение CORS по одному конкретному методу.

Спринт загрузки документации: https://spring.io/guides/gs/rest-service-cors/

Включение CORS конфигурации

Контроллер метод CORS

Так что RESTful веб-сервис будет включать в себя контроль доступа CORS заголовки в его ответ, вы просто должны добавить @CrossOrigin аннотацию к методу обработчика:

Вот пример с сайта Spring загрузки:

@CrossOrigin(origins = "http://localhost:9000") 
@RequestMapping("/greeting") 
public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) { 
    System.out.println("==== in greeting ===="); 
    return new Greeting(counter.incrementAndGet(), String.format(template, name)); 
} 
+0

Если вы посмотрите на мой пример, это именно то, что я сделал. Хотя я получаю проблему с перекрестным происхождением для моего метода почты и не получаю. –

+0

Можете ли вы предоставить HTTP-заголовки как запросов POST, так и GET? –

+0

проблема была в клиентском коде, потому что в этом контексте у меня есть два метода get и post со следующим кодом работает как и ожидалось: private makePostRequest (путь: строка, тело: любое) { let headers = new Headers(); headers.append ('Content-Type', 'application/json'); let url = 'http://betty-backend.cfapps.io/$ {path}'; возврата this.http.post (URL, JSON.stringify (тело), ​​{заголовки: заголовки}) .map ((разрешение: Response) => res.json())} и аннотации @CrossOrigin является необходимо –

Смежные вопросы