簡體   English   中英

在spring-boot中使用RestTemplate返回404

[英]Using RestTemplate in spring-boot returns with 404

我正在嘗試使用rest模板在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對象(郎,鑰匙,和文字)在POST請求得到mcResponse體:

public mcResponse parseTheSentiments(String text,Languages lang,String key)引發異常{

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;
    }

看起來變量請求應該是

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";

聽起來好像控制器沒有包含在spring上下文中。 如果您只有一個帶有@SpringBootApplication批注的應用程序,則請確保您的控制器位於與該批注的應用程序相同或更低的軟件包中。

要檢查控制器是否被拾取,可以將以下日志記錄選項添加到application.properties中

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

服務器啟動時,您應該在日志中看到類似以下內容的內容

1.要顯示控制器處於彈簧上下文中

DefaultListableBeanFactory     : Creating shared instance of singleton bean 'sentimentParserController'

2.顯示/ api / something網址的映射

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

如果您同時看到這兩種情況,那么您說的話應該會起作用。 只需確保將請求發送到/api/something並且服務器在端口8080上運行即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM