gpt4 book ai didi

java - RequestMappingHandlerMapping registerMapping 未与 RequestBody/HttpEntity 绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 02:25:45 24 4
gpt4 key购买 nike

我的 Spring Web MVC 项目外部有一个 Controller 加载器。

喜欢:Class myControllerClass = classLoader.loadClass("withfully.packagename.className");

让我们创建它的一个实例:

Object myControllerClassInstance = myControllerClass.newInstance();

然后我使用下面的代码片段在当前运行的 tomcat 服务器中注册端点(我当前的 Spring MVC 项目已经在运行)

    private void addMapping(String urlPath, RequestMethod methodType, String methodName, String consumes,
String produces) {

RequestMappingInfo requestMappingInfo = RequestMappingInfo.paths("/someCommon/test1/test2")
.methods(RequestMethod.GET)
.consumes("application/json")
.produces("application/json")
.build();

for (Method m : myControllerClass.getDeclaredMethods()) {
m.setAccessible(true);
if (m.getName().equals(methodName)) {
requestMappingHandlerMapping.registerMapping(requestMappingInfo, myControllerClassInstance, m);
}
}
}

结果成功使用消息注册端点

INFO: Mapped "{[/someCommon/test1/test2],methods=[GET],consumes=[application/json],produces=[application/json]}" onto public test.testclass.process.Process userDefinedpackage.someCommon.controller.UserDeployedRestServiceController.someMethod(org.springframework.http.HttpEntity<java.lang.String>) throws java.lang.Exception

何处签名 UserDeployedRestServiceController是:

    @RequestMapping(value="test1/test2",method=RequestMethod.GET, consumes="application/json", produces="application/json")
public @ResponseBody test.testclass.process.Process someMethod(HttpEntity<String> httpEntity) throws Exception{

System.out.println("We got httpEntity body = "+httpEntity.getBody());

现在我尝试使用 json 数据作为请求正文从外部访问 URL,但得到

我们得到了 httpEntity body = null

我尝试过@ResponseBody也一样,但没有运气+我也尝试过

requestMappingHandlerMapping.setDefaultHandler(new UserDeployedServiceRequestHandler());

哪里

    class UserDeployedServiceRequestHandler implements HttpRequestHandler {

@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setStatus (200);
}
}

请告诉我到底缺少什么。为什么请求正文总是为 null 或为空?

我的应用程序上下文有

 <mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>

最佳答案

我认为您的问题可能很简单,因为 GET 请求通常不支持请求正文。看到这个问题:HTTP GET with request body

FWIW - 我基本上使用这个工作

RequestMappingInfo mappingInfo = RequestMappingInfo
.paths("/the/url")
.methods(RequestMethod.POST)
.consumes(MediaType.APPLICATION_JSON_VALUE)
.produces(MediaType.APPLICATION_JSON_VALUE)
.build();

Method meth = ControllerClass.class.getMethod("controllerMethod", RequestType.class));
mappingHandler.registerMapping(mappingInfo, controller, meth);

public class ControllerClass {
public ResponseEntity<ResponseType> controllerMethod (@RequestBody RequestType request) {
// service request
return new ResponseType();
}
}

关于java - RequestMappingHandlerMapping registerMapping 未与 RequestBody/HttpEntity 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com