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

Spring mvc serials如何使用jackson和基于返回值的注释产生结果?

颛孙正谊
2023-03-14

有一个Spring MVC REST 调用:

@RequestMapping(value = "/new", method = RequestMethod.POST)
public IQuery create(@RequestParam Map<String, Object> propertiesMap){...}

如您所见,结果值是一个带有getter方法的接口。有一个特殊的实现:

public class QueryImp implements IQuery{..}

rest方法的实际结果是QueryImp,但我希望json结果只包含接口中存在getter方法的属性。

编辑:

另一方面,QueryImp是可能的输出之一。该系统基于maven模块和Spring注入,因此允许第三方模块实现自己的类。我们将不限制贡献者。

共有2个答案

徐兴昌
2023-03-14

最简单的解决方案是创建一个包装器,如下所示:

public class QueryWrapper implments IQuery{
  @JsonIgnor
  private IQuery ref;

  public QueryWrapper(IQuery ref){
    this.ref = ref;
  }
  // wrap all methods
}

最后包装所有实例:

@RequestMapping(value = "/new", method = RequestMethod.POST)
public IQuery create(@RequestParam Map<String, Object> propertiesMap){
    IQuery query = null;
    ...
    return new QueryWrapper(query);
}
艾星河
2023-03-14

因此,如果我理解正确的话,您有多个< code>IQuery实现,并且序列化需求由实现决定?对于特定的情况(< code>QueryImpl),您希望它只序列化接口公开的属性吗?

如果这是你问题的正确陈述,我认为你真正应该做的是在实现类上使用@JsonIgnore@JsonIgnoreProperties控制序列化。这样每个实现类都决定了自己的序列化行为。

 类似资料:
  • 问题内容: 我已经考虑了很长时间了,我需要一种对数据库中的注释添加答复的方法,但是我不确定如何进行。 这是我当前的注释表(不多说,只是一个开始): 这是我当前的查询: 一种选择是创建一个名为“ comment_replies”的新表,但是我不确定是否能够在一个查询中选择所有评论和评论回复,如果我添加了一个名为“ reply”的新列,不知道如何对它们进行排序,以获取每个回复的每个评论。 我很想获得一

  • 我试图在没有任何XML的情况下设置Spring AOP。我想启用

  • 我正在尝试使用Spring 4实现REST服务。 该应用程序使用Java 7构建,并在Tomcat 7上运行。 REST方法将返回JSON格式的customer对象。应用程序是注释驱动的。 Customer类有JAXB注释。Jackson罐子出现在课堂路径中。据我所知,Jackson将使用JAXB注释生成JSON。 客户类别: 我已经将REST服务类注释为@RestController(根据Spr

  • 我有一个类和一个注释 我想写一个 aspectj 切入点,它将捕获所有具有 value=true 的注释方法注释的方法。我该怎么做?

  • 问题内容: 我如何使用类型提示来注释一个返回总是返回两个值的函数:a和a ?提示很接近,除了将返回值类型限制为元组,而不是生成器或其他可迭代类型。 我主要是好奇的,因为我想注释一个用于返回多个值的函数,如下所示: 通常函数喜欢做这样的事情(它返回一个元组),但我喜欢的类型暗示要足够灵活,以取代发电机或列表或别的东西返回的元组。 问题答案: 您总是返回 一个 对象;使用只需返回一个元组。 是的,完全

  • 我正在创建一个Spring Boot应用程序来替换一个遗留的api应用程序,所以所有的路由/header/etc都已经固定下来了。在那个遗留应用程序中,我们使用自定义Accept头来包含版本和内容类型。因此,我们的Accept标头如下所示: xml或catalog.v2.json等。 下面是处理请求的方法的请求映射。我现在正在尝试处理v1.xml。Spring找到了正确的方法,整个方法被执行并返回