总结:kathasis如何发送get请求获取数据

时间:2022-11-01 15:45:42

1.进入前端页面,找到对应的模块,开始塞字段数据。

2.如果字段为基本类型,如String,比如website,则在前段界面,右击,inspect,找到对应的代码所处的jsp,跳转到该jsp,通过该jsp。在前端添加一个person,则地址栏显示:backstop/crm/ManageContacts.do?ACTION=NEW_PERSON,因此,确定

对应的action是ManageContacts。到editPerson.jsp中搜索关键字website,确认字段名是website,然后在ManageContacts中搜索website,可以查看到这个website字段具体是塞在party接口中,进入party,发现其实现类是AbstractPartyEntity,左按ctrl,右边鼠标点中AbstractPartyEntity,可发现其中PersonEntity继承了AbstractPartyEntity。而PersonEntity刚好又实现了Person这个接口。

找到界面字段在entity对应的地方后,可以开始以下操作:

1.在PersonDto中定义website字段。

2.在PersonConverte的updateDto(Person entity,PersonDto dto)中,dto.setWebsite(entity.getWebsite()),直接塞数据即可。

3.如果界面字段是一个实体类型,则在PersonDto

@JsonApiToOne(lazy = true)
    @JsonApiLookupIncludeAutomatically
    private SystemUserDto representative;

如果是一对多,则为:

@JsonApiToMany(lazy = true)
    private List<PartyLocationDto> partyLocations;

注意,在PersonDto属性中,只能定义是基本类型或者Dto实体类型,不能是Entity类型,也就是,不能定义为private SystemUser representative.

4.新建SystemUserDto等,包含需要的属性。

5.确保有SystemUserRepository。

6.   确保SystemUserConverter,用于SystemUserDto和SystemUserEntity之间的转换。

7.添加person和representative的关系,新建PersonToRepresentativeRelationship:

@Singleton
public class PersonToRepresentativeRelationship
        extends AbstractRelationshipRepository<PersonDto, SystemUserDto> {

}

添加person和PartyLocation的关系,新建PersonToPartyLocationRelationship:

@Singleton
public class PersonToPartyLocationRelationship extends AbstractEntityToPartyLocationRelationship<PersonDto> {

}
public abstract class AbstractEntityToPartyLocationRelationship<S extends AbstractKatharsisDto>
        extends AbstractRelationshipRepository<S, PartyLocationDto> {

    @Override
    public List<PartyLocation> getTargetEntities(Object source, String fieldName, QueryParamsHelper helper) {
        Person sourceEntity = cast(source);
        List<PartyLocation> partyLocations = new ArrayList<PartyLocation>();

        if(!Objects.isNull(sourceEntity.getHomeLocation())){
            partyLocations.add(sourceEntity.getHomeLocation());
        }else if(!Objects.isNull(sourceEntity.getBusinessLocation())){
            partyLocations.add(sourceEntity.getBusinessLocation());
        }else if(!Objects.isNull(sourceEntity.getOtherLocation1())){
            partyLocations.add(sourceEntity.getOtherLocation1());
        }else if(!Objects.isNull(sourceEntity.getOtherLocation2())){
            partyLocations.add(sourceEntity.getOtherLocation2());
        }
        return partyLocations;

    }

    @Override
    public void addRelations(S source, Iterable<String> targetIds, String fieldName) {
    }

}

对以上代码的理解:

在PersonDto中,通过注解,已经定义了personDto和partyLocationDto之间的关系,那么,这里的relationship则是用来定义person和partyLocation实体之间的关系。

7.在PersonConverter中的updateDto(Person entity, PersonDto dto)方法中,添加如下代码:

 private void setRepresentative(Person person, PersonDto personDto) {
        if (!Objects.isNull(person.getRepresentative())) {
            personDto.setRepresentative(new SystemUserDto(person.getRepresentative().getId()));
        }
    }

这里表示,将entity数据塞到dto中去。在塞的过程中,要保证,SystemUser对应的entity和dto也是可以相互转换的。

为什么能通过一个id,然后直接new SystemUserDto(id)就可以获取到了SystemUser的全部数据信息,因为:

在发送请求:/backstop/api/people/781187/company时,kathasis框架会自动去根据repository执行findOne或者findAll查找。