当前位置: 首页 > 面试题库 >

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

蓬长恨
2023-03-14
问题内容

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

    @RequestMapping(value = "/foo", method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE)

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

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

我们如何定义@JSONRequestMapping上面的东西?注意valuemethod一样,传入了和@RequestMapping,也可以传入,consumes或者produces如果默认值不合适,也很好。

我需要控制我要返回的内容。我需要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中
了解更多信息。



 类似资料:
  • 我需要控制我回来的东西。我希望/注释方法,以便获得适当的头。

  • 问题内容: 因此,我使用此链接来设置进度条,并且在运行此代码时效果很好。 但是,使用我拥有的设置,我似乎无法获得progressbar进行实际更新… progressBar.getProgress()实际上获得了正确的进度,但是UI并未更新。这是到目前为止的代码: Main.java ProgressBarController.java ProgressBarLayout.fxml 问题答案: 在

  • 另一个问题是我为什么需要LTS?我认为如果我们不采取LTS,那么任何我们都得不到任何支持/补丁的缺陷(或安全补丁)。对吧?

  • 问题内容: 我正在使用ElasticSearch进行第一步,并从命令行测试当前正在使用curl的东西。但是,这有点烦人,因为我必须在文本编辑器上键入所有内容,然后粘贴到控制台中(控制台中没有选项卡格式),并且得到的json输出未格式化。 因此,我想知道是否有许多与json数据配合使用的SQL控制台,以使其更易于测试和使用json rest网络服务。 您使用什么工具执行此类任务? 问题答案: 首先,

  • 问题内容: 我正在用Java编写一个简单的控制台应用程序(80x24),是否有等效的gotoxy(x,y)? 问题答案: 如果要通过gotoxy(x,y)将光标重新定位在控制台上特定的位置,则通常可以使用VT100控制代码来执行此操作。参见http://www.termsys.demon.co.uk/vtansi.htm。 做类似的事情 它将光标移动到控制台上的位置10,10。

  • 本文向大家介绍修改不适用于SAP ABAP中的内部表和控制表,包括了修改不适用于SAP ABAP中的内部表和控制表的使用技巧和注意事项,需要的朋友参考一下 您的更新模型似乎有些错误。PFB更新了一个 示例