首页 > 解决方案 > 在 spring-boot 中使用 RestTemplate 返回 404

问题描述

我正在尝试使用 rest 模板在 springboot 应用程序中的 post 请求中发送正文。这是控制器:(我删除了@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在发布请求中将对象(语言、键和文本)作为正文发送以获取 mcResponse:

公共 mcResponse parseTheSentiments(字符串文本,语言语言,字符串键)抛出异常 {

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

标签: javaspring-boot

解决方案


看起来应该是可变请求

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

推荐阅读