将原理在PersonDto中定义的partyLocations,剪切到PartyDto中去。

   @JsonApiToMany
    private List<PartyLocationDto> partyLocations;

重构PersonConverter中的updateDto方法,

@Overridepublic void updateDto(Person entity, PersonDto dto) {    Locale l = currentUserProvider.get().getLocale();    partyConverter.updateDto(entity, dto);    dto.setPronunciation(entity.getPronunciation());    ....}

PartyConverter代码重构如下:

public class PartyConverter implements Converter<Party, PartyDto> {
    @Inject
    private ApiContext apiContext;

    @Override
    public void updateDto(Party party, PartyDto partyDto){
        partyDto.setId(party.getId());
        partyDto.setName(party.getName());
        partyDto.setSpecificResourceType(new ResourceDto(apiContext.getResourceType(party), partyDto.getId()));
        setPartyLocations(party, partyDto);
    }

    @Override
    public void updateEntity(PartyDto dto, Party entity) {
//        System.out.println("--");
        PersonEntity personEntity = (PersonEntity)entity;
    }

    public void setPartyLocations(Party party, PartyDto partyDto){
        List<PartyLocationDto> partyLocationDtoList = new ArrayList<PartyLocationDto>();
        if(Objects.isNull(party.getPartyLocations())){
            return ;
        }
        for(PartyLocation partyLocation:party.getPartyLocations()){
            PartyLocationDto partyLocationDto = new PartyLocationDto(partyLocation.getId());
            partyLocationDtoList.add(partyLocationDto);
        }
        partyDto.setPartyLocations(partyLocationDtoList);
    }
}

修改relationship:注意,传递的参数是PersonDto,如果是PartyDto,则会报错relationship出错,思考为什么。

@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) {
        Party sourceEntity = cast(source);
        List<PartyLocation> partyLocations = new ArrayList<PartyLocation>();
        if(!Objects.isNull(sourceEntity.getPartyLocations())){
            partyLocations.addAll(sourceEntity.getPartyLocations());
        }
        return partyLocations;

    }

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

}

再次编译,则可以get请求成功。同时,post请求也是ok的。

补充:何时调用relationship,这是kathasis内部自己定义的,与类名是没有关系的,主要是和传递的泛型参数有很大的关系。--------感谢andrew指导分析这个知识点。

重构get请求代码---PartyLocation的更多相关文章

  1. HTTP请求代码整理

    HTTP请求代码整理 类别 代码 注释 1xx – 信息提示 100 继续 101 切换协议 2xx - 成功 200 确定.客户端请求已成功 201 已创建 202 已接受 203 非权威性信息 2 ...

  2. jmeter 的java请求代码在main方法里面执行

    1.新建一个java请求执行加法类 public class TestDemo { public int Tdemo(int a,int b){ int sum = 0; sum = a+b; ret ...

  3. 如何重构"箭头型"代码

    本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各式各样的问题和想法.按道理来说这些都是编程的基本功,似乎不太值得写一篇文章,不过我觉得 ...

  4. 使用策略模式重构switch case 代码

    目录 1.背景 2.案例 3.switch…case…方式实现 4.switch…case…带来的问题 5.使用策略模式重构switch…case…代码 6.总结 1.背景 之前在看<重构    ...

  5. js基石之---易读、易复用、易重构的 JavaScript 代码规范

    易读.易复用.易重构的 JavaScript 代码规范 1.变量命名规范有意义 Bad: const yyyymmdstr = moment().format("YYYY/MM/DD&quo ...

  6. RAID5 IO处理之写请求代码详解

    我们知道RAID5一个条带上的数据是由N个数据块和1个校验块组成,其校验块由N个数据块通过异或运算得出,这样才能在任意一个成员磁盘失效时通过其他N个成员磁盘恢复出用户写入的数据.这也就要求RAID5条 ...

  7. .NET重构—单元测试的代码重构

    阅读目录: 1.开篇介绍 2.单元测试.测试用例代码重复问题(大量使用重复的Mock对象及测试数据) 2.1.单元测试的继承体系(利用超类来减少Mock对象的使用) 2.1.1.公用的MOCK对象: ...

  8. C# 主动发起请求代码

    本文用于写代码是给提示 private string GetHW(string uri) { string returnStr = ""; HttpWebRequest hwReq ...

  9. 重构 MVC; 代码分享工具(重构,改进,打分)

    include 模块和 extend 模块的不同:   Class Extension: 通过向singleton class中加入Module来定义class method,是对象扩展的一个特例. ...

随机推荐

  1. 设置SSH自动登陆(免密码,用户名)

    设置SSH自动登陆(免密码,用户名)   1.创建公钥.公钥  ssh-keygen -t rsa  无视它出来的任何提示,欢快的一路回车到底吧.  2.把公钥 id_rsa.pub 复制到远程机器的 ...

  2. 解决Opencv高低版本不兼容问题

    目前OpenCV版本已更新到2.4...由此出现了一系列问题,解决如下: 1.cxcore.h等头文件找不到: 法一.将opencv1.0中的各种.h或者.lib文件拷到opencv2.3.1对应in ...

  3. altibase MDB的创建sequence的举例

    create sequence seq_deduct_record_history start with 1 increment by 1 minvalue 1 nomaxvalue;

  4. SSL/TLS捕包分析

    一.基本概念 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密 ...

  5. 电话圈(floyd)

    题意: 如果两个人相互打电话,则说他们在同一个电话圈里.例如,a打给b,b打给c,c打给d,d打给a,则这4个人在同一个圈里:如果e打给f但f不打给e,则不能推出e和f在同一个电话圈里,输出所有电话圈 ...

  6. 消息队列mq总结(重点看,比较了主流消息队列框架)

    转自:http://blog.csdn.net/konglongaa/article/details/52208273 http://blog.csdn.net/oMaverick1/article/ ...

  7. 使用自定义端口连接SQL Server 2008的方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 使用过SQL Server的人大多都知道,SQL Server服务器默认监听的端口号是1433,但是我今天遇到的问题是我的机器上有三个数据库实例, ...

  8. Maven里头的pom.xml配置详解

    正常的pom配置文件如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  9. Gradle的快速入门

    1.基础知识: Gradle提供了:构建项目的框架.但是其中起作用的是Plugin. Gradle在默认情况下提供了很多常用的Plugin.例如:构建Java的Plugin.还有war.Ear等. G ...

  10. 第一章计算机网络和因特网-day01

    什么是因特网: 其一:构成因特网的基本硬件与软件. 其二:为分布式应用提供服务的联网基础设施. 终端机器称为主机( host ) 或者端系统( end system ) 端系统通过通信链路(commu ...