Наследование в Json Response Spring при загрузке - PullRequest
2 голосов
/ 24 февраля 2020

У меня есть два класса, A и B:

class A{
    private int numberOne;
    private int numberTwo;
    public int getNumberOne() {
        return numberOne;
    }
    public void setNumberOne(int numberOne) {
        this.numberOne = numberOne;
    }
    public int getNumberTwo() {
        return numberTwo;
    }
    public void setNumberTwo(int numberTwo) {
        this.numberTwo = numberTwo;
    }
    }

    class B extends A {

    private int numberThree;
    public int getNumberThree() {
        return numberThree;
    }
    public void setNumberThree(int numberThree) {
        this.numberThree = numberThree;
    }
}

Как мне это нравится:

    ResponseEntity<A> someMethod(){
        return new B(1,2,3);
    }
json 
    {
     "numberOne":"1",
     "numberTwo":"2"
    }

    ResponseEntity<B> someMethod(){
        return new B(1,2,3);
    }
json 
    {
     "numberOne":"1",
     "numberTwo":"2",
     "numberThree":"3"
    } 

Как я могу использовать JSON игнорируя в Spring Boot, который я хотите?

1 Ответ

2 голосов
/ 24 февраля 2020

Вы создаете новый класс

public class Views {
public static class Public {
}

public static class Internal extends Public {
 }
}

A.class

public class A {

public A(int numberOne, int numberTwo) {
    this.numberOne = numberOne;
    this.numberTwo = numberTwo;
}

@JsonView(Views.Public.class)
private int numberOne;
@JsonView(Views.Public.class)
private int numberTwo;

public int getNumberOne() {
    return numberOne;
}

public void setNumberOne(int numberOne) {
    this.numberOne = numberOne;
}

public int getNumberTwo() {
    return numberTwo;
}

public void setNumberTwo(int numberTwo) {
    this.numberTwo = numberTwo;
}

}

B.class

public class B extends A{

@JsonView(Views.Internal.class)
private int numberThree;

public B(int numberOne, int numberTwo) {
    super(numberOne, numberTwo);
}

public B(int numberOne, int numberTwo, int numberThree) {
    super(numberOne, numberTwo);
    this.numberThree = numberThree;
}

public int getNumberThree() {
    return numberThree;
}

public void setNumberThree(int numberThree) {
    this.numberThree = numberThree;
}

}

Контроллер

 @GetMapping("/a-method")
@JsonView(Views.Public.class)
public ResponseEntity<A> getA(){
    return ResponseEntity.ok(new B(1,2,3));
}

@GetMapping("/b-method")
@JsonView(Views.Internal.class)
public ResponseEntity<B> getB(){
    return ResponseEntity.ok(new B(1,2,3));
}
...