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

如何在Spring控制器中请求源和请求体

骆嘉石
2023-03-14

我正在使用Java和Spring构建一个RESTAPI,我需要在我的控制器中处理一个POST请求,但我需要从该请求中提取主体,它是一个JSON,也是该请求的“来源”,

@RequestMapping(value = "/create", method = RequestMethod.POST)
public XXX createMyObject(@RequestBody String data, YYY){
   MyObject mo = new MyObject();
   mo.setData = data;
   mo.setOrigin = yyy;

   myRepository.save(mo);
   return XXX;
}

我有几个问题:首先是如何获取该请求的来源(我猜是在标题中移动的url?),是否有与@RequestBody类似的注释?。

我的第二个问题是,在这种post方法中,通常应该返回什么对象作为响应。

共有3个答案

柯永福
2023-03-14

@自动拥有的私有HttpServletRequest servletRequest;

您可以声明请求对象,然后在方法中访问以获取Uri

梁丘招
2023-03-14

您应该能够从HttpServletRequest对象获取头和URI

public XXX createMyObject(@RequestBody String data, HttpServletRequest request)

至于响应,我要说的是返回字符串,它是一个视图名称,您可以向它传递一些表示操作成功与否的属性,或者是ModelAndView。

越开畅
2023-03-14

回答你的问题:

>

  • 如果在方法参数中包含HttpServletRequest,则可以从中获取原始信息。如。

    public XXX createMyObject(@Requestbody String data, HttpServletRequest request) {
            String origin = request.getHeader(HttpHeaders.ORIGIN);
            //rest of code...
    

    }

    对于rest响应,您需要返回对象(json)或HttpStatus的表示,以通知客户端调用是否成功。例如returnresponseEntity

  •  类似资料:
    • 我有一个spring应用程序,它可以与Mobile交换JSON。Spring控制器如下所示: 我想知道,记录http请求正文和响应正文的最佳方式是什么?目前,我有一个定制的json消息转换器,它在从json中创建bean之前记录一个请求正文。我使用CustomTraceInterceptor记录响应正文。不幸的是,CustomTraceInterceptor不允许记录请求正文。 任何更好的解决方案

    • 问题内容: 我正在开发一个使用大量ajax的grails应用程序。如果请求是ajax调用,那么它应该给出响应(这部分正在工作),但是如果我在浏览器中输入URL,它应该带我到主页/索引页面而不是请求的页面。下面是Ajax调用的示例gsp代码。 如果我们在浏览器URL栏中键入http:// localhost:8080 / Dash / todo / list ,则控制器应重定向到http:// lo

    • 我正在替换Spring Boot REST控制器中对POST请求输入的手动验证。JSR-303 Spring Bean验证用于验证请求主体中的实例变量,这是预期的工作。什么是建议的方法来验证请求主体中的对象不是null? 我试过: > 用@NotNull注释整个类 我正在替换: 与Bean验证等效: 我尝试通过以下方式对控制器方法进行单元测试: 我希望MethodArgumentNotValidE

    • 根据请求主体中的session_type,我必须将请求映射到特定的POJO(JSON->JAVA POJO)。 例如,如果请求正文中的'session_type'是'typeX',那么请求应该映射到ClassX POJO。如果请求正文中的“session_type”是“type y”,那么请求应该映射到ClassY POJO。 如果有一种方法可以使用某种requestbody注释来完成它呢?

    • 我有一堆控制器,比如:

    • 我正在使用RestTemplate方法将请求发布到endpoint。我在不同的文件中有和,我想把它们传递给POST请求,除此之外,我还想把传递给endpoint。 我能够成功地传递头和请求,但不能传递包含凭据的Http实体 有没有办法让我三样东西都及格 > HttpHeader 要求 这是我的密码 以下代码位于NewHttpHeader中。包含和