为spring控制器创建一个@JsonMixin注释

 gpik40799 发布于 2023-02-06 09:34

我正在使用带杰克逊的春天来回应json.

我想创建一个注释,以允许杰克逊的一个叫做mixins的功能.这个想法类似于这个问题使用Jackson Mixins和MappingJacksonHttpMessageConverter和Spring MVC

public @interface JsonMixin{
  public class target();
  public class mixin();
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JsonFilter{
    public JsonMixin[] mixins();
}

用法:

@JsonFilter(mixins={
  @JsonMixin(target=Target1.class, mixin=Mixin1.class),
  @JsonMixin(target=Target2, mixin=Mixin2.class)
})
@RequestMapping(value = "/accounts/{id}",
        produces = MediaType.APPLICATION_JSON_VALUE,
        method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
public final Account getAccountsViaQuery(@PathParam("id") final long id) 
        throws IOException {
    return accountService.get(id);
}

通常(没有注释)它将按如下方式完成:

@RequestMapping(value = "/accounts/{id}",
        produces = MediaType.APPLICATION_JSON_VALUE,
        method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
public final Account getAccountsViaQuery(@PathParam("id") final long id) 
        throws IOException {
final String matchingAccounts = accountService.findByAccountNameOrNumber(query);
    ObjectMapper mapper = new ObjectMapper();
    SerializationConfig serializationConfig = mapper.getSerializationConfig();
    serializationConfig.addMixInAnnotations(Target1.class, Mixin1.class);
    serializationConfig.addMixInAnnotations(Target2.class, Mixin2.class);

    return mapper.writeValueAsString(matchingAccounts);
}

使用这个自定义注释我将如何链接到内部对象映射器并告诉它使用注释提供的mixins?

1 个回答
  • 我最后跟着这个家伙做了什么:

    https://github.com/martypitt/JsonViewExample

    并在这里创建了我自己的项目:

    https://github.com/jackmatt2/JsonResponse

    2023-02-06 09:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有