如何一个VO实体在多个接口中返回的字段不一样呢?

假设现在有一张user表,包含id、name、pwd、area四个字段,有两个接口:

  • 用户列表
  • 用户详情

  1. 在用户列表中,只展示\`id\`/\`name\`/\`area\`三个字段;
  2. 在详情中,展示全部字段。

环境:springboot项目。

现在我配置了\`spring.jackson.default-property-inclusion=NON\_NULL\`。

P1:在列表接口中,一旦\`area\`字段为空,返回的字段就参差不齐,有的返回2个字段,有的返回三个字段,请问如何解决这样的问题?

P2:在详情接口中,也会出现这样的问题,当\`area\`为\`null\`时,详情返回3个字段;否则返回4个字段。


Q:请问如何让接口返回固定的字段,例如,列表接口中,固定返回3个字段,即使\`area\`为空,也要保留该字段。同理,详情接口中,固定返回4个字段,即使有字段为空也要保留该字段。

问题出现的环境背景及自己尝试过哪些方法

我尝试改配置\`spring.jackson.default-property-inclusion\`,
但是改了好多个都没有达到我的要求。

回答

如何一个VO实体在多个接口中返回的字段不一样呢?
ResponseBodyAdvice这个接口很强大,在你转json之前,会回调beforeBodyWrite这方法,你可以修改接口返回的数据,问题主要是在哪勒,程序不知道你这次调用到底需要哪些字段,这个得调用接口的时候,就传入相关参数过来

Spring提供了JsonView来解决当前问题:

package club.yunzhi.questionnaire.Entity;

import com.fasterxml.jackson.annotation.JsonView;

public class Test {

@JsonView({AllJsonView.class, IdJsonView.class})

private Long id;

@JsonView({AllJsonView.class, NameJsonView.class})

private String name;

@JsonView({AllJsonView.class, PwdJsonView.class})

private String pwd;

@JsonView({AllJsonView.class, AreaJsonView.class})

private String area;

// 省略setter\getter

interface AllJsonView {

}

interface IdJsonView {

}

interface NameJsonView {

}

interface PwdJsonView {

}

interface AreaJsonView {

}

}

控制器:

package club.yunzhi.questionnaire.Entity;

import com.fasterxml.jackson.annotation.JsonView;

import java.util.List;

public class TestController {

@JsonView(Test.AllJsonView.class)

List<Test> getAll() {

}

@JsonView(GetByIdJsonView.class)

Test getById() {

}

private interface GetByIdJsonView extends

Test.IdJsonView,

Test.NameJsonView,

Test.AreaJsonView {

}

}

希望能解决你的当前问题。

以上是 如何一个VO实体在多个接口中返回的字段不一样呢? 的全部内容, 来源链接: utcz.com/a/98940.html

回到顶部