为请求映射创建自定义注释 headers spring
Create custom annotation for request mapping headers spring
我正在使用 spring-boot-1.5.6。我内部有一个控制器,我有大约 8 个请求映射,它们具有公共 headers。下面提到的 Headers 对于控制器中的大多数方法都是强制性的,并且提到所有 headers 看起来很难看,有没有什么方法可以概括或自定义注释,这样我就不想复制 headers 在所有方法中。
@RestController
public class RestController {
private static final Logger logger = LoggerFactory.getLogger(RestController.class);
/**
* Simply chooses a few headers, logs them and add them to model to
* showHeaders view to render to the user.
*/
@GetMapping(value="/showheaders")
public String getHeaders(
@RequestHeader(value="sample") String sample,
@RequestHeader(value="sample1") String sample1,
@RequestHeader(value="sample2") String sample2,
@RequestHeader(value="sample3") String sample3,
@RequestHeader(value="sample4") String sample4) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + sample);
logger.info("sample1 : " + sample1);
logger.info("sample2 : " + sample2);
logger.info("sample3 : " + sample3);
logger.info("sample4 : " + sample4);
}
预计:
@RestController
public class RestController {
private static final Logger logger = LoggerFactory.getLogger(RestController.class);
/**
* Simply chooses a few headers, logs them and add them to model to
* showHeaders view to render to the user.
*/
@GetMapping(value="/showheaders")
public String getHeaders(@MyHeaders headers) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + sample);
logger.info("sample1 : " + sample1);
logger.info("sample2 : " + sample2);
logger.info("sample3 : " + sample3);
logger.info("sample4 : " + sample4);
}
我知道我们可以使用 @RequestHeader Map headers 但是大摇大摆地,我想看到所有 headers 参数 name.so我们可以为方法传递所有 headers。使用地图没有大摇大摆地显示任何东西。
如有任何提示或建议,我们将不胜感激。
你可以这样使用@RequestHeader
;
@GetMapping(value="/showheaders")
public String getHeaders(@RequestHeader Map<String, String> myHeaders) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + myHeaders.get("sample"));
logger.info("sample1 : " + myHeaders.get("sample1"));
logger.info("sample2 : " + myHeaders.get("sample2"));
logger.info("sample3 : " + myHeaders.get("sample3"));
logger.info("sample4 : " + myHeaders.get("sample4"));
}
请求头在Map中设置。你可以得到你需要的。
您可以使用 @ModelAttribute
来达到这个目的:
1.Create 一个页眉持有人 Class:
public class MyheaderHolder {
private String sample;
private String sample1;
private String sample2;
private String sample3;
private String sample4;
//getter setters
}
2.Define 一个模型属性:
@ModelAttribute("myHeaderHolder")
public Something addSomething(@RequestHeader(value = "sample") String sample,
@RequestHeader(value = "sample1") String sample1,
@RequestHeader(value = "sample2") String sample2,
@RequestHeader(value = "sample3") String sample3,
@RequestHeader(value = "sample4") String sample4) {
return new MyHeaderHolder(name);
}
3.Refactor getHeaders 控制器使用 ModelAttribute
@GetMapping(value = "/showheaders")
public String getHeaders(@ModelAttribute MyHeaderHolder myHeaderHolder) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + myHeaderHolder.getSample());
logger.info("sample1 : " + myHeaderHolder.getSample1());
logger.info("sample2 : " + myHeaderHolder.getSample2());
logger.info("sample3 : " + myHeaderHolder.getSample3());
logger.info("sample4 : " + myHeaderHolder.getSample4());
}
我正在使用 spring-boot-1.5.6。我内部有一个控制器,我有大约 8 个请求映射,它们具有公共 headers。下面提到的 Headers 对于控制器中的大多数方法都是强制性的,并且提到所有 headers 看起来很难看,有没有什么方法可以概括或自定义注释,这样我就不想复制 headers 在所有方法中。
@RestController
public class RestController {
private static final Logger logger = LoggerFactory.getLogger(RestController.class);
/**
* Simply chooses a few headers, logs them and add them to model to
* showHeaders view to render to the user.
*/
@GetMapping(value="/showheaders")
public String getHeaders(
@RequestHeader(value="sample") String sample,
@RequestHeader(value="sample1") String sample1,
@RequestHeader(value="sample2") String sample2,
@RequestHeader(value="sample3") String sample3,
@RequestHeader(value="sample4") String sample4) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + sample);
logger.info("sample1 : " + sample1);
logger.info("sample2 : " + sample2);
logger.info("sample3 : " + sample3);
logger.info("sample4 : " + sample4);
}
预计:
@RestController
public class RestController {
private static final Logger logger = LoggerFactory.getLogger(RestController.class);
/**
* Simply chooses a few headers, logs them and add them to model to
* showHeaders view to render to the user.
*/
@GetMapping(value="/showheaders")
public String getHeaders(@MyHeaders headers) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + sample);
logger.info("sample1 : " + sample1);
logger.info("sample2 : " + sample2);
logger.info("sample3 : " + sample3);
logger.info("sample4 : " + sample4);
}
我知道我们可以使用 @RequestHeader Map headers 但是大摇大摆地,我想看到所有 headers 参数 name.so我们可以为方法传递所有 headers。使用地图没有大摇大摆地显示任何东西。
如有任何提示或建议,我们将不胜感激。
你可以这样使用@RequestHeader
;
@GetMapping(value="/showheaders")
public String getHeaders(@RequestHeader Map<String, String> myHeaders) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + myHeaders.get("sample"));
logger.info("sample1 : " + myHeaders.get("sample1"));
logger.info("sample2 : " + myHeaders.get("sample2"));
logger.info("sample3 : " + myHeaders.get("sample3"));
logger.info("sample4 : " + myHeaders.get("sample4"));
}
请求头在Map中设置。你可以得到你需要的。
您可以使用 @ModelAttribute
来达到这个目的:
1.Create 一个页眉持有人 Class:
public class MyheaderHolder {
private String sample;
private String sample1;
private String sample2;
private String sample3;
private String sample4;
//getter setters
}
2.Define 一个模型属性:
@ModelAttribute("myHeaderHolder")
public Something addSomething(@RequestHeader(value = "sample") String sample,
@RequestHeader(value = "sample1") String sample1,
@RequestHeader(value = "sample2") String sample2,
@RequestHeader(value = "sample3") String sample3,
@RequestHeader(value = "sample4") String sample4) {
return new MyHeaderHolder(name);
}
3.Refactor getHeaders 控制器使用 ModelAttribute
@GetMapping(value = "/showheaders")
public String getHeaders(@ModelAttribute MyHeaderHolder myHeaderHolder) {
logger.info("Inside getHeaders() method...");
logger.info("sample : " + myHeaderHolder.getSample());
logger.info("sample1 : " + myHeaderHolder.getSample1());
logger.info("sample2 : " + myHeaderHolder.getSample2());
logger.info("sample3 : " + myHeaderHolder.getSample3());
logger.info("sample4 : " + myHeaderHolder.getSample4());
}