有什么方法可以在Java中的单个类,接口或注释中定义httpheaders?

时间:2019-01-24 06:35:05

标签: java spring

有什么方法可以在Java的单个类中定义httpheaders?这类似于为我的应用程序中使用的用户定义的httpHeaders创建包装器类。而不是在我的控制器方法中定义所有标头。

@PostMapping
public <ResponseEntity<Book>> getBooks(
   @ModelAttribute("requestContext") RequestContext context, @PathVariable("bookId") String bookId,
   @RequestHeader(value="x-institute-id") String instituteId,
   @RequestHeader(value="x-customer-last-logged-time") String xCustomerLastLoggedTime,
   @RequestHeader(value="x-customer-ip-address") String xCustomerIpAddress,
   @RequestHeader(value="x-interaction-id", required=false) String xInteractionId){

     ---implementation

   }

因此它可以是界面或注释。喜欢:

public class MyApplicationHeaders{
   @RequestHeader(value="x-institute-id") String instituteId,
   @RequestHeader(value="x-customer-last-logged-time") String xCustomerLastLoggedTime,
   @RequestHeader(value="x-customer-ip-address") String xCustomerIpAddress,
   @RequestHeader(value="x-interaction-id", required=false) String xInteractionId)
}

以便我们可以将其用作:

@PostMapping
public <ResponseEntity<Book>> getBooks(
   @ModelAttribute("requestContext") RequestContext context, @PathVariable("bookId") String bookId, @MyApplicationHeaders appHeaders{

     ---implementation

   }

1 个答案:

答案 0 :(得分:0)

根据@RequestHeader的文档

  

如果方法参数为Map<String, String>MultiValueMap<String, String>HttpHeaders,则将使用所有标头名称和值填充映射。

这意味着您可以使用MapHttpHeaders作为参数类型来保存多个标头值。对于您而言,Map适用,因为您正在处理非标准标头:

@PostMapping
public ResponseEntity<Book> getBooks(
    @ModelAttribute("requestContext") RequestContext requestContext,
    @PathVariable("bookId") String bookId,
    @HttpHeaders Map<String, String> appHeaders) {

    String instituteId = appHeaders.get("x-institute-id");
    // do something else
}