小编Pau*_*Pau的帖子

何时使用 Bean 验证与自定义验证框架?

我正在验证我的数据访问对象类的字段。在一次尝试中,我开始向属性(@NotNull、@NotBlank、@Min、@Max 等)添加 Bean 验证注释。我还有更多注释 Jackson (JsonProperty (..)) 用于 swagger 库和文档(@Api (...))。在我看来,这个类非常“脏”,有很多注释(每个属性至少有三个注释)。一个字段的示例:

@JsonProperty("ownName")
@Api(description="it is my own name" required=true)
@Valid
@NotNull
private SomeObject object; 
Run Code Online (Sandbox Code Playgroud)

在另一次尝试中,我使用 SpringValidator接口执行了我自己的验证。如果使用自定义验证器,例如 Spring 接口,它似乎更清晰,并且还允许您自由地为不同情况生成多个验证器。此外,该类似乎没有过多的注释和验证独立于该类。示例Validator

public class UserValidator implements Validator {

    @Override
    public boolean supports(Class<?> arg0) {
        return User.class.isAssignableFrom(arg0);
    }

    @Override
    public void validate(Object obj, Errors error) {
        User user = (User) obj;
        if(user.getPassword().length() < 10)
        {
            error.reject("Password must be lesser than 10");
        }

        //more validations....

    }
}
Run Code Online (Sandbox Code Playgroud)
  • 你什么时候会使用一个或另一个?
  • 各自的优缺点是什么?

java validation spring bean-validation spring-validator

5
推荐指数
1
解决办法
1218
查看次数

Docker-machine create:预创建检查出错:"Hyper-v命令必须以管理员身份运行"

我尝试docker for Windows 10使用next命令创建一个docker-machine :

docker-machine create --driver hyperv default
Run Code Online (Sandbox Code Playgroud)

但我得到了下一个错误

Error with pre-create check: "Hyper-v commands have to be run as an Administrator"
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何解决这个问题?谢谢

docker docker-machine

5
推荐指数
2
解决办法
4301
查看次数

重构:用方法对象替换方法说明

我正在寻找重构一个太长的方法。搜索我发现了这个技术: 用方法对象替换方法,但我根本不明白。

如果重构的方法是:

public class Order {
  //Method to refactor
  public double price() {
    double primaryBasePrice;
    double secondaryBasePrice;
    double tertiaryBasePrice;

     //compute impl
  }

 //.....
}
Run Code Online (Sandbox Code Playgroud)

在 Web 示例中,使用方法对象重构替换方法 将如下所示:

public class Order {

  //Method refactored
  public double price() {
    return new PriceCalculator(this).compute();
  }
  //.......
}

//Method object
public class PriceCalculator {
  private double primaryBasePrice;
  private double secondaryBasePrice;
  private double tertiaryBasePrice;

  public PriceCalculator(Order order) {
    //??
  }

  public double compute() {
    // impl
  }
}
Run Code Online (Sandbox Code Playgroud)

但是如何PriceCalculator …

c# java refactoring coding-style

4
推荐指数
1
解决办法
1360
查看次数

用于存储库中本机查询的Spring Data JPA默认架构

我在Spring Boot Application中使用Spring-dat-jpa,并尝试在存储库中执行本机查询。当我在表名称后附加模式名称时,它可以正常工作,但它不能独立运行,并且不会像我定义的实体类那样从application.properties文件中选择模式名称

我正在使用下面的属性来设置默认架构,它对于实体类和命名查询工作正常。但是,当我在@query中编写任何本机查询时,它开始抱怨架构名称:

spring.jpa.properties.hibernate.default_schema=NPS_WO
Run Code Online (Sandbox Code Playgroud)

以下是我的查询:

@Repository
public interface TestRepository extends JpaRepository<TypeRef,Long> {


    @Query(value="SELECT t.* from Type_Ref t")
    public List<Object[]> findAllTypes();

}
Run Code Online (Sandbox Code Playgroud)

在我的实际情况中,此查询将由复杂的本机查询代替。

任何帮助将不胜感激。

hibernate spring-data-jpa spring-boot

3
推荐指数
1
解决办法
3525
查看次数

jdbcType=BIGDECIMAL 在 mybatis 和 ibatis 中不支持

使用jdbcType=BIGDECIMAL不支持myBatisibatis和抛出下一个错误:

Error resolving JdbcType. Cause: java.lang.IllegalArgumentException: 
No enum constant org.apache.ibatis.type.JdbcType.BIGDECIMAL
Run Code Online (Sandbox Code Playgroud)

什么是jdbcType替代品BIGDECIMAL

我正在使用mybatis-3.4.4版本

ibatis jdbc mybatis spring-mybatis

3
推荐指数
1
解决办法
5176
查看次数

获取标题feign netflix

我正在使用netflix伪装来传达微服务。

因此,我的微服务A有一个操作“ OperationA”,微服务B消耗了该操作,它通过名为X-Total的标头将一个参数传递给B

 MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
 headers.add("X-Total", page.getTotalSize()); 
Run Code Online (Sandbox Code Playgroud)

我的客户端界面如下:

@Headers({
    "Content-Type: " + MediaType.APPLICATION_JSON_UTF8_VALUE
})
@RequestLine("GET Dto/")
List<Dto> search();

static DtoClient connect() {
    return Feign.builder()
        .encoder(new GsonEncoder())
        .decoder(new GsonDecoder())
        .target(ConditionTypeClient.class, Urls.SERVICE_URL.toString());
}
Run Code Online (Sandbox Code Playgroud)

然后,我得到了dto的列表,但是我不知道如何获取标头X-TOTAL参数:

public List<Dto> search() {
    DtoClient client = DtoClient.connect();
    return client.search();
}
Run Code Online (Sandbox Code Playgroud)

如何获取标头参数?

java web-services netflix-feign spring-cloud-netflix

2
推荐指数
2
解决办法
5615
查看次数

SQL - IN运算符获取位置

是否可以使用运算符获取参数列表的第一个参数的位置(索引)IN

我正在寻找的结果是下一个:

SELECT 2 IN(2, 3, 1); -- Result I want is 0 but with IN is true
SELECT 3 IN(2, 3, 1); -- Result I want is 1 but with IN is true
SELECT 0 IN(2, 3, 1); -- Result I want is -1 but with IN is false
SELECT 1 IN(1, 1, 3); -- RESULT I WANT IS 0 ,1 but with IN is true
Run Code Online (Sandbox Code Playgroud)

sql postgresql

2
推荐指数
1
解决办法
61
查看次数

如何检查是否存在 id 列表

我希望执行一个查询,如果存在(真或假),则返回一个 id 列表,而不是仅返回一个。

常见的存在查询如下

select exist(select 1 from one_table where id_table = 'some_value') 
Run Code Online (Sandbox Code Playgroud)

我想要一个检查多个值的查询。会像下一个一样

select exist(select 1 from one_table 
             where id_table in('some_value_1', '...')) 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我正在寻找的所有 Id 都必须存在。

sql postgresql

2
推荐指数
1
解决办法
6080
查看次数

如何用大写字母(大写)分隔ABAP字符串?

目前,我必须使用ABAP中的代码,其中包含一个字符串,该字符串具有多个以大写字母/大写字母开头的单词,并且它们之间没有空格,必须将其分成一个内部表,如下所示:

输入:

NameAgeAddress

输出:

Name

Age

Address
Run Code Online (Sandbox Code Playgroud)

abap

1
推荐指数
1
解决办法
213
查看次数