当前位置: 首页 > 知识库问答 >
问题:

Java进程解码存储库getById

燕翼
2023-03-14

我有一个存储库和一个DTO(让我们称之为DataDTO)在DTO里面我有一个字段-链接(带getter和setter)

public class DataDTO {
   private String link;

   @JsonProperty(value = "link")
   Public String getLink() {
      return link
   }

   public void setLink(String value) {
      link = value;
   }
}

我需要解码link属性为客户端使用:

import java.net.URLDecoder;

...

URLDecoder.decode(s, StandardCharsets.UTF_8);

问题是它是在多个(很多)控制器中完成的。

我可以在每个控制器中这样做(实际上是在控制器调用的服务中):

   ...
   DataDTO dataDTO = dataRepository.findById(id).orElse(null);
   if (dataDTO) {
      dataDTO.setLink(URLDecoder.decode(dataDTO.getLink(), StandardCharsets.UTF_8));
   }

但我正试图找到一种更通用的方法。

考虑在getter中执行此操作:

@JsonProperty(value = "link")
Public String getLink() {
   return URLDecoder.decode(link, StandardCharsets.UTF_8)   
}

但一般来说,我不确定在DTO中添加逻辑是否是一种好的做法。

考虑一下是否可以扩展getByIdrepository函数以返回解码的值,这样就可以保持DTO逻辑自由。

你会怎么做?

想听听是否有人有任何建议或更好的做法来处理DTO?在存储库级别?在DTO级别?在服务层面?在一个单位?在控制器里?

提前感谢!

共有2个答案

燕刚捷
2023-03-14

您可以使用属性转换器在从数据库获取数据以及存储数据时进行自动转换。

创建属性转换器

public class LinkAttributeConverter implements AttributeConverter<String, String> {

  @Override
  public String convertToDatabaseColumn(String attribute) {
    ...
  }

  @Override
  public String convertToEntityAttribute(String dbData) {
    return URLDecoder.decode(dbData, StandardCharsets.UTF_8);
  }
}

在实体的字段上使用

@Convert(converter = LinkAttributeConverter.class)
private String link;

所以,当您使用存储库获取链接时,链接会自动转换

罗睿识
2023-03-14

>

不反对在dto中加入逻辑。因为对象必须具有自治性,并且具有数据的对象是dto。但你的情况不同。

如果我与您处于相同的情况,我将创建另一个对象,该对象将与链接字符串重叠。

public class MyLink {

  private String link;

  public String getLink() {
        URLDecoder.decode (this.link, StandardCharsets).UTF_8);   
  }
}

这样做的好处是,当您使用MyLink对象获取链接数据时,您可以随时强制自己获取解码后的url。

 类似资料:
  • 现在,我尝试自己用Java解码文件,并将其写入文件: 这样我就得到了不可读的字符,比如���� . 我还尝试将字节数组转换为字符串: 通过这种方式,我得到了与我从网站下载的相同的六转储,但是没有空格和换行符。在这两种情况下,我得到以下错误: 我很感激你的帮助

  • 环境: SUSE Linux enterprise server 11 SP1 git version 1.6.0.2 gitoite for access Control git web在apache上运行 我有两个存储库。在回购a中,它的编码是gbk,而回购b是UTF-8。 那么如果回购a有中文代码,那么在git web上查看时,汉字将是乱码 但回购b中的中文代码将正确显示。 所以我想问一下,

  • 问题内容: 读取/ proc / $ PID / maps时,将获得映射的内存区域。这是甩掉其中一个地区的方法吗? 谢谢 问题答案: 不!打电话与。然后打开,寻找区域偏移量,然后按照中给出的那样读取区域的长度。 这是我编写的在C语言中执行的程序。这是我编写的在Python(以及ptrace绑定)中执行的模块。最后,将程序的所有区域转储到files的程序。 请享用!

  • 本文向大家介绍SQL数据库存储过程示例解析,包括了SQL数据库存储过程示例解析的使用技巧和注意事项,需要的朋友参考一下 什么是存储过程:存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。 存储过程的好处: 1.由于数据库执行动作时,是先编译后

  • 搜索仓库和镜像 你可以使用 Docker 来搜索所有公开可用的仓库和镜像。 $ docker search ubuntu 这将通过 Docker 提供的关键字匹配来显示您可用的仓库列表。 私有仓库将不会显示到仓库搜索结果上。你可以通过 Docker Hub 的简况页面来查看仓库的状态。 仓库 你的 Docker Hub 仓库有许多特性。 stars 你的仓库可以用星被标记,你也可以用星标记别的仓

  • 问题内容: 我有定期被推送到数据库中的Java代码(很难解释为什么它存在于数据库中,而这只会使焦点从主要问题上移开)。 在运行时,我查询数据库。我可以执行从数据库中获得的代码吗?我只在代码中存储main方法的内容。运行数据库的服务器是HTTP服务器。 数据库中的示例代码(仅供参考): 预期产量: 问题答案: 任何Java程序都是正确的Groovy程序。因此,您可以将Groovy依赖项添加到项目中,