Использование RestTemplate в Spring-Boot возвращает с 404 - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь отправить тело в почтовом запросе в приложении Springboot, используя шаблон отдыха.Вот контроллер: (я удалил @RequestBody, потому что использовал заголовок application/x-www-form-urlencoded)

    @RestController
@CrossOrigin
@RequestMapping("/api")
public class SentimentParserController {

    @Autowired
    private SentimentParserService sentimentParserService;

  @RequestMapping(value = "/something", method = RequestMethod.POST, consumes="application/x-www-form-urlencoded")
    public ResponseEntity<mcResponse>getTheSentiments(  mcSentimentRequestDTO sentimentRequestDTO){
        return  sentimentParserService.getSentimentsMc(sentimentRequestDTO);


    }
}

Я хочу отправить объект sentimentRequestDTO (lang, key и text) в качестве тела вотправьте запрос на получение mcResponse:

public mcResponse parseTheSentiments (текст строки, языки lang, ключ строки) выдает исключение {

RestTemplate restTemplate = new RestTemplate();
String request = "http://localhost:8080";

mcSentimentRequestDTO mSentiments =new mcSentimentRequestDTO(key,"EN",text);

HttpHeaders headers = new HttpHeaders();
headers.add("content-type", "application/x-www-form-urlencoded");

MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("key", key);
map.add("txt", text);
map.add("lang", Languages.ENGLISH.toString());
HttpEntity<MultiValueMap<String, String>> request1 = new HttpEntity<MultiValueMap<String, String>>(map, headers);

mcResponse response = restTemplate.postForObject(request, request1 , mcResponse.class );

return response;

}

Однако я получаюследующая ошибка: 404 null.

Можете ли вы помочь мне?Заранее спасибо и вот класс обслуживания:

public ResponseEntity<mcResponse> getSentimentsMc(mcSentimentRequestDTO sentimentRequestDTO){
        ResponseEntity<mcResponse> dto = null;

                try {
                    dto = sentimentConverter.getTheSentiments(mcsParser.parseTheSentiments(sentimentRequestDTO.getText(),
                            Languages.ENGLISH, sentimentRequestDTO.getKey()));
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        return dto;
    }

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Похоже, контроллер не включается в контекст весны.Если у вас есть приложение, помеченное @SpringBootApplication, убедитесь, что ваш контроллер находится в пакете, который совпадает с аннотированным приложением или ниже.

Чтобы проверить, что контроллер поднят, вы можетедобавьте следующие параметры ведения журнала в ваше application.properties

logging.level.org.springframework.beans=debug
logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=trace

Когда ваш сервер загрузится, вы должны увидеть что-то вроде следующего в журнале

1. Чтобы показать, что контроллер находится вspring-context

DefaultListableBeanFactory     : Creating shared instance of singleton bean 'sentimentParserController'

2. Чтобы отобразить сопоставление для / api / что-то URL

RequestMappingHandlerMapping : Mapped 1 handler method(s) for class SentimentParserController: {public org.springframework.http.ResponseEntity SentimentParserController.getTheSentiments(mcSentimentRequestDTO)={[/api/something],methods=[POST]}}

Если вы видите оба из них, то, что вы говорите, вы делаетедолжно сработать.Просто убедитесь, что вы отправляете запрос на /api/something, а сервер работает на порту 8080.

0 голосов
/ 16 декабря 2018

Похоже, что запрос переменной должен быть

String request = "http://localhost:8080/something";

Также, если у класса контроллера есть префикс, этот префикс также должен быть в запросе.Я имею в виду, если ваш класс выглядит следующим образом

@RestController
@RequestMapping("/myApi")
public class CertificateController {
....
@RequestMapping(value = "/something", method = RequestMethod.POST)
    public ResponseEntity<mcResponse>getTheSentiments(  mcSentimentRequestDTO sentimentRequestDTO){
        return  sentimentParserService.getSentimentsMc(sentimentRequestDTO);
}

, тогда запрос должен быть

String request = "http://localhost:8080/myApi/something";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...