当前位置: 首页 > 知识库问答 >
问题:

2@RestControllers具有不同的配置

储思聪
2023-03-14

在Springboot中有两个不同的@RestController使用不同的MappingJackson2HttpMessageConverter吗?...或者MappingJackson2HttpMessageConverter对于Spring Boot应用程序中的所有@RESTController是通用的吗?

基本上,目标是使用不同的MappingJackson2HttpMessageConverter,该MappingJackson2HttpMessageConverter包含不同的Jackson ObjectMapper,该Mapper使用Jackson MixIn在第二个控制器中将id重命名为priceId(在Json中)。

调用第一个控制器会做什么:

http://localhost:8080/controller1/price

{id:“id”,description:“description”}

调用第二个控制器会做什么:

http://localhost:8080/controller2/price

{priceid:“id”,description:“description”}

@SpringBootApplication
public class EndpointsApplication {

public static void main(String[] args) {
    SpringApplication.run(EndpointsApplication.class, args);
}

@Data // Lombok
@AllArgsConstructor
class Price {
    String id;
    String description;
}

@RestController
@RequestMapping(value = "/controller1")
class PriceController1 {

    @GetMapping(value = "/price")
    public Price getPrice() {
        return new Price("id", "Description");
    }
}

@RestController
@RequestMapping(value = "/controller2")
class PriceController2 {

    @GetMapping(value = "/price")
    public Price getPrice() {
        return new Price("id", "Description");
    }
}

}

共有1个答案

南宫胡媚
2023-03-14

MappingJackson2HttpMessageConverter对于所有用@RestController注释的控制器都是通用的,但是有一些方法可以解决这个问题。一个常见的解决方案是将控制器返回的结果包装到标记类中,并使用自定义MessageConverter(Spring Hateoas使用的示例实现)和/或使用自定义响应媒体类型。

TypeConstrainedMappingJackson2HttpMessageConverter的示例用法,其中ResourceSupport是标记类。

MappingJackson2HttpMessageConverter halConverter = 
    new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class);
halConverter.setSupportedMediaTypes(Arrays.asList(HAL_JSON));
halConverter.setObjectMapper(halObjectMapper);

您可以在这里找到一个基于代码的工作示例:https://github.com/andreaskl/springbootendpoints

不使用PropertyNamingStrategy,可以将自定义序列化程序用于Price传输对象

 类似资料:
  • 有人成功地在Spring Boot应用程序中配置了两个具有不同数据源的hikari连接池吗?如何使用application.properties来完成?

  • 我想用不同的布局定义2个不同的log4j控制台。我尝试了以下方法: 然而,当我尝试使用这些appender时,我遇到了问题。我将第一个appender连接到root,然后尝试将第二个appender连接到某些祖先记录器: 我遇到的麻烦是,来自这两个祖先记录器的消息最终会转到stdout appender,而不是stdoutMDC appender。我尝试了禁用和不禁用相加,但没有区别。 有什么想法

  • Spring配置:我创建了2个bean,引用了相同的类但不同的数据库会话。 现在有没有办法将id为“abc1”的bean设置为用于自动装配的默认bean,并在像这样明确提到时使用abc2进行自动装配: 解决方案: 使abc1默认为自动连接。 为了创建abc2的实例,我们可以使用:

  • 问题内容: 我创建了一个小部件,该小部件显示一个简单的textview,可在配置活动中将其作为Edittext编辑。我将输入的文本与共享的首选项一起保存,因此用户可以点击小部件来编辑文本,并且已经输入的文本将出现在edittextfield中。我的问题是这个。我希望用户能够添加多个窗口小部件,但是当添加第二个窗口小部件时,将从共享首选项中加载与其他窗口小部件中相同的文本。并且,当在widget上被

  • 我在apache Web服务器上有两个虚拟主机。它们中的每一个都有一个文档根: 我设置了一个php fpm,现在我想为每个fpm设置不同的open_basedir。我搬走了 然后创建了两个php。不同文件夹中的ini。然后,我在ini vhost配置文件中添加了以下代码: 但是当我得到时,一切都与以前不同。我想我错过了什么!如何强制php fpm获取这两个php。每个虚拟主机的ini?

  • 所以我的问题是,当我用profile只运行applicaiton时,Spring是否合并了这两个profile,并且我可以在应用程序中看到和?