Spring RequestMapping适用于产生和使用JSON的控制器

使用多个消费和生产的Spring控制器application/json,我的代码到处都是长注释,例如:

    @RequestMapping(value = "/foo", method = RequestMethod.POST,

consumes = MediaType.APPLICATION_JSON_VALUE,

produces = MediaType.APPLICATION_JSON_VALUE)

有没有产生“复合/继承/聚合”与注释的方式默认为值consumes和produces,这样,我可以代替写是这样的:

    @JSONRequestMapping(value = "/foo", method = RequestMethod.POST)

我们如何定义类似@JSONRequestMapping上面的内容?请注意value和一样method传入和@RequestMapping,也可以传入consumesproduces如果默认值不合适的话也很好。

我需要控制我要返回的内容。我需要produces/ consumes批注方法,以便获得适当的Content-Type标题。

回答:

从Spring 4.2.x开始,你可以创建自定义映射注释,并将其@RequestMapping用作元注释。所以:

有没有一种方法可以产生带有消费和生产默认值的“复合/继承/聚合”注释,所以我可以这样写:

@JSONRequestMapping(value = "/foo", method = RequestMethod.POST)

是的,有这种方法。你可以创建如下的元注释:

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@RequestMapping(consumes = "application/json", produces = "application/json")

public @interface JsonRequestMapping {

@AliasFor(annotation = RequestMapping.class, attribute = "value")

String[] value() default {};

@AliasFor(annotation = RequestMapping.class, attribute = "method")

RequestMethod[] method() default {};

@AliasFor(annotation = RequestMapping.class, attribute = "params")

String[] params() default {};

@AliasFor(annotation = RequestMapping.class, attribute = "headers")

String[] headers() default {};

@AliasFor(annotation = RequestMapping.class, attribute = "consumes")

String[] consumes() default {};

@AliasFor(annotation = RequestMapping.class, attribute = "produces")

String[] produces() default {};

}

然后,你可以使用默认设置,甚至可以根据需要覆盖它们:

@JsonRequestMapping(method = POST)

public String defaultSettings() {

return "Default settings";

}

@JsonRequestMapping(value = "/override", method = PUT, produces = "text/plain")

public String overrideSome(@RequestBody String json) {

return json;

}

你可以AliasFor在spring的javadoc和github Wiki中了解更多信息。

以上是 Spring RequestMapping适用于产生和使用JSON的控制器 的全部内容, 来源链接: utcz.com/qa/403328.html

回到顶部