如何一个VO实体在多个接口中返回的字段不一样呢?
假设现在有一张user表,包含id、name、pwd、area四个字段,有两个接口:
- 用户列表
- 用户详情
- 在用户列表中,只展示\`id\`/\`name\`/\`area\`三个字段;
- 在详情中,展示全部字段。
环境: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\`,
但是改了好多个都没有达到我的要求。
回答
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