当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中使用RestTemplate返回404

何升
2023-03-14

我试图发送一个体在后请求在一个springboot应用程序使用Rest模板。这里是控制器:(我删除了@刚体,因为我使用了应用程序/x-wow-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);


    }
}

我想发送情感请求DTO对象(lang,key和text)作为帖子请求中的正文,以获得mcResent:

公共mc响应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;

}

但是,我得到了以下错误:404null。

你能帮帮我吗?提前感谢,以下是服务等级:

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个答案

端木震博
2023-03-14

听起来控制器没有被包括在Spring上下文中。如果你只是有一个用@SpringBootApplication注释的应用程序,那么请确保你的控制器位于一个与注释的应用程序相同或更低的包中。

要检查控制器是否被拾取,您可以将以下日志记录选项添加到application.properties

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

当您的服务器启动时,您应该会在日志中看到以下内容

1 显示控制器在spring上下文中

DefaultListableBeanFactory     : Creating shared instance of singleton bean 'sentimentParserController'

2显示/api/something 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端口上运行。

柏麒
2023-03-14

看起来变量请求应该是

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 Boot,我想使用RestTemplate调用一个查询并返回它的结果。 如何使用RESTTemplate调用查询?还是有更好的办法做这件事?

  • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?

  • 我试图测试一个简单POST Rest调用,但存在NullPointerException。 我的RestController: 我的单元测试: 由于以下错误,此测试失败:NullPointerException,确切地说,response ResponseEntity对象为Null。 verify输出将执行以下操作: 知道为什么响应是空的吗?我为测试使用了正确的注释,因此应该注入模拟。也许我在这里

  • 我希望在spring boot中返回类似以下内容的json响应: 我的RestController如下所示 但我得到的反应是这样的

  • 我正在进行一个SpringBoot项目,该项目使用常规MVC机制来公开REST API。 在一个特定的GET API中,我得到了406HTTP响应。 下面是我的控制器方法的样子: AnalysisDetailResponse是使用Lombok创建的(在其他API的情况下,Lombok可以完美地工作) 我已经验证了整个响应对象的内容,它似乎是完美的。然而,响应总是406。 我需要JSON格式的响应,

  • 我正在使用Spring boot来渲染页面。我也使用了叶子。但是我在从浏览器调用它时得到了下面提供的异常。 我已经编写了视图解析器类,当我使用为此。 和我在应用程序中提到的一样。yml也是。应用yml是 这是我的Controller类,负责渲染index.jspMainController.class