将原理在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. wordpress 插件 汉化

    http://blog.wpjam.com/article/localizing-a-wordpress-plugin-using-poedit/ 翻译或者说本地化 WordPress 插件和主题可以 ...

  2. MySql数据库约束

    <MySQL技术内幕:InnoDB存储引擎>本书从源代码的角度深度解析了InnoDB的体系结构.实现原理.工作机制,并给出了大量实践,本着将书读薄的思想,循序渐进的记录对本书学习的读书笔记 ...

  3. Shell脚本备份Mongodb数据库

    目录 环境还原 环境创建 编写shell脚本 准备文件 创建shell脚本 执行shell脚本 进阶版 感谢 诚邀访问我的个人博客:我在马路边 更好的阅读体验点击查看原文:Shell脚本备份Mongo ...

  4. XML数据库的尝试

    首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大 ...

  5. Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(3)- TSL指令

    本文接上一篇文章继续介绍如何实现同一时间只允许一个进程进入临界区的机制.本文主要介绍TSL指令. 方案汇总 屏蔽中断 锁变量 严格轮换法 TSL指令 Peterson解法 一.What is TSL ...

  6. Ubuntu下部署GitLab-——基于14.04系统

    搭建GitLab的目的: 方便公司开发管理代码 GitLab实现的功能: 1.关闭了gitlab的注册功能 2.修改了默认端口 3.汉化 0.前期准备 # 环境 Ubuntu 14.04 root@i ...

  7. 解决方案: the selected file is a solution file but was created by a newer version of this application and cannot be opened

    最近在用IronGithub访问Github api时遇到一个问题: the selected file is a solution file but was created by a newer v ...

  8. QtCreator开启-O编译优化的方式

    首先,编译优化必须是在Release模式下进行,保证程序没有任何bug的条件下进行执行.编译优化能极大提升程序的运行效率,级别越高速度越快,但是对代码健壮性要求也越高! 选择编译release模式,在 ...

  9. DevExpress TreeList GridView 样式设置

    1.GridView 样式设置 this.gridViewUser.PaintStyleName = "Flat"; 2.TreeList 样式设置 this.treeListDe ...

  10. vue-cli脚手架build目录中的dev-server.js配置文件

    本文系统讲解vue-cli脚手架build目录中的dev-server.js配置文件 这个配置文件是命令npm run dev 和 npm run start 的入口配置文件,主要用于开发环境 由于这 ...