关于Java:如何在Spring控制器中请求请求的起源和主体

 2021-04-27 

How to request origin and body of a request in Spring controller

我正在使用Java和Spring构建REST API,并且需要在控制器中处理POST请求,但是我需要从该请求中提取主体,该主体是JSON以及该请求的"来源",

1
2
3
4
5
6
7
8
9
@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方法中作为响应返回的通常合适的对象是什么。


回答您的问题:

  • 如果在方法参数中包括HttpServletRequest,则可以从那里获取原点信息。例如

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

    } ??

  • 对于其余响应,您将需要返回对象(json)或HttpStatus的表示形式,以通知客户端调用是否成功。例如
    Return ResponseEntity<>(HttpStatus.ok);


  • 您应该能够从HttpServletRequest对象获取标头和uri

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

    至于响应,我会说返回String,这将是一个视图名称,您可以向其传递一些属性来表示操作是否成功,或者传递给ModelAndView。


    @自动连线
    私有HttpServletRequest servletRequest;

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


    尝试一下:

    1
    2
    3
    4
    5
    6
    @RequestMapping(value ="/create", method = RequestMethod.POST)
    public XXX createMyObject(HttpServletRequest request, @RequestBody String body) {
        String origin = URI.create(request.getRequestURL().toString()).getHost();
        System.out.println("Body:" + body +" Origin:" + origin);
        return XXX;
    }