Это больше вопрос SpringBoot; вот как вы это делаете:
- Допустим, у вас есть состояние (
MyState
) со следующими атрибутами: - эмитент: Сторона
- accountId: String
- значение: int
- Внутри вашего
clients
модуля (т.е. модуля веб-сервера) создайте класс модели ответа для вашего состояния; это простой класс, имеющий атрибуты, которые вы хотите вернуть в JSON объекте:
public class MyStateResponseModel {
// Notice that I defined "issuer" as a String,
// because I want my response only to return the name;
// not the full "Party" object
private String issuer;
private String accountId;
private int value;
// Add getters and setters.
}
Создание сопоставителя модели ответа для вышеуказанного класса:
@Component
public class MyStateResponseModelMapper extends ModelMapper {
PropertyMap<MyState, MyStateResponseModel> map;
public MyStateResponseModelMapper() {
map = new PropertyMap<MyState, MyStateResponseModel>() {
@Override
protected void configure() {
map().setIssuer(source.getIssuer().getName().toString());
map().setAccountId(source.getAccountId());
map().setValue(source.getValue());
}
};
}
}
Теперь внутри вашего класса контроллера, где у вас есть код вашего API:
// Define an instance of the mapper; it will get injected by SpringBoot.
private final MyStateResponseModelMapper myStateResponseModelMapper;
// Constructor injection.
public MyController(MyStateResponseModelMapper myStateResponseModelMapper) {
this.myStateResponseModelMapper = myStateResponseModelMapper;
}
// Your API.
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
private ResponseEntity<MyStateResponseModel> getMyState(/*some request params*/) {
// You do some query or run a flow that returns an instance
// of "MyState" called "myState".
return ResponseEntity.ok()
.body(myStateResponseModelMapper.map(myState, MyStateResponseModel.class));
}