我不知道我问的问题是不是真的很愚蠢.但这里是:
我想编写一个适用于特定类型的自定义注释.例如,如果我有一个A类,那么我希望有一个可以应用于A的对象的注释.
像这样的东西:
@Target({ElementType.FIELD, //WHAT_ELSE_HERE_?})
public @interface MyAnnotation {
String attribute1();
}
public class X {
@MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE
String str;
@MyAnnotation (attribute1="..") //PERFECTLY VALID
A aObj1;
@MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE
B bObj1;
}
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
说我有一个包含元素的列表(34, 11, 98, 56, 43).
使用Java 8流,如何找到列表中最小元素的索引(例如,在这种情况下为1)?
我知道这可以在Java中轻松完成list.indexOf(Collections.min(list)).但是,我正在寻找一个类似Scala的解决方案,我们可以简单地说List(34, 11, 98, 56, 43).zipWithIndex.min._2获得最小值的索引.
有没有什么可以使用流或lambda表达式(比如Java 8特定功能)来实现相同的结果.
注意:这仅用于学习目的.我在使用Collections实用程序方法时没有任何问题.
我有一个自定义验证器,用于确保在保存实体之前应用某些业务规则.
例如(假设的),当ProductPrice保存下面定义的时,我验证给定产品的fromDate和endDate(由productId标识)与ProductPriceDB中该产品的现有行没有重叠.
@MyCustomValidator
class ProductPrice {
Long productId;
Date fromDate;
Date toDate;
}
Run Code Online (Sandbox Code Playgroud)
只要将其ProductPrice保存为单个实体,这样就可以正常工作.一旦该实体作为一对多关系添加到另一个实体中,如下所示,
class Product {
List<ProductPrice> productPrices;
}
Run Code Online (Sandbox Code Playgroud)
更新父(Product)实体(为了保存它工作正常),以及子实体(List中的一个或多个ProductPrice)中的一些更改,然后它失败,因为保存List中的一个ProductPrice实例不知道接下来要保存的ProductPrice的任何信息.
详细说明:
假设数据库中有两ProducePrice行给定Product,如下所示:
Id Product Id From Date To Date Price
1 PRD-001 01-01-2016 10-06-106 29.99
2 PRD-001 11-06-2016 10-12-106 32.99
Run Code Online (Sandbox Code Playgroud)
假设我想将rows(ProductPrice)作为Product实体的一部分更新为以下值:
Id Product Id From Date To Date Price
1 PRD-001 01-01-2016 30-06-106 29.99
2 PRD-001 01-07-2016 31-12-106 32.99
Run Code Online (Sandbox Code Playgroud)
以上数据仍然有效,但hibernate验证器将失败.这是因为节省了第一排的时候,如果我查询数据库来检查fromDate和toDate现有行,然后将与第2行现有的数据库中的重叠.但这不正确,因为第二行也将用有效值更新.也可能是,表中有3行,我在当前事务中只更新其中的2行,第3行未触及.因此,我必须在验证器中查询数据库以检查有效性.
问题太长了,我可能不清楚解释问题.但总而言之,是否有可能查询当前的持久化上下文并获取脏的数据(即将保存)?
java validation hibernate hibernate-validator bean-validation
我有两个名为A和B的ArrayLists,大小相等,包含一些数字.现在我要计算这样的事情:
int sum = 0;
for(int i=0; i<A.size() && i<B.size(); i++) {
sum += A.get(i)*B.get(i);
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用任何额外的用户定义方法的情况下,通过使用Java 8功能(流,lambda表达式等)来实现上面的工作,计算总和?
是否可以使用这样的 Spring Data JPA 存储库方法:
User findByEmailOrUserName(String usernameOrEmail);
Run Code Online (Sandbox Code Playgroud)
上面的方法名称不起作用,因为 Spring Data JPA 在尝试查找需要绑定到方法中的第二个属性名称的第二个参数时抛出异常。
我想要一个将转换为的方法名称 select t from User t where t.email = :usernameOrEmail OR t.userName = :usernameOrEmail
方法名查询有这种可能吗?
我有以下方法RequestMappings:
@RequestParam(value = "someValue1", required = false) final String someValue1
@RequestParam(value = "someValue2", required = false) final String someValue2
Run Code Online (Sandbox Code Playgroud)
这两个参数都标记为可选。目前,我检查提供了哪个属性,并基于此采取了一些措施。是否可以强制在请求中始终存在两个参数中的至少一个?
PS:我不是要创建两个不同的端点。
简而言之,问题是:在 RestTemplate Autowired 之后,如何将动态值传递给 Spring REST 拦截器?
现在详细解释一下:
我有一个 Spring REST 拦截器,如下所示:
public class HeaderRequestInterceptor implements ClientHttpRequestInterceptor {
private final String headerName;
private final String headerValue;
public HeaderRequestInterceptor(final String headerName, final String headerValue) {
this.headerName = headerName;
this.headerValue = headerValue;
}
public ClientHttpResponse intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException {
HttpRequest wrapper = new HttpRequestWrapper(request);
wrapper.getHeaders().set(headerName, headerValue);
return execution.execute(wrapper, body);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用上面的拦截器配置 RestTemplate,如下所示:
@Bean
public RestTemplate getRestTemplate() {
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>(); …Run Code Online (Sandbox Code Playgroud) 我有一个使用TestNG进行测试的方法,我用下面的注释标记了它:
@Test(invocationCount=10, threadPoolSize=5)
Run Code Online (Sandbox Code Playgroud)
现在,在我的测试方法中,我想获得正在执行的当前invocationCount.那可能吗?如果是,那么我很高兴知道如何.
更恰当的例子:
@Test(invocationCount=10, threadPoolSize=5)
public void testMe() {
System.out.println("Executing count: "+INVOCATIONCOUNT); //INVOCATIONCOUNT is what I am looking for
}
Run Code Online (Sandbox Code Playgroud)
作为参考,我在Eclipse中使用TestNG插件.
我有以下课程设置。
class Base {
@Autowired
private BaseService service; //No getters & setters
....
}
@Component
class Child extends Base {
private final SomeOtherService otherService;
@Autowired
Child(SomeOtherService otherService) {
this.otherService = otherService;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在为班级编写单元测试Child。如果我使用@InjectMocks,那么otherService结果将为空。Child如果我在测试设置中使用类的构造函数,则Base类中的字段将为null.
我知道关于字段注入是邪恶的所有争论,但我更感兴趣的是知道是否有一种方法可以在不改变类注入其属性的方式Base和方式的情况下解决这个问题Child?
谢谢!!
我正在使用swagger-codegen为我的一个REST API生成Java REST客户端。REST API使用可选的标头参数。客户端中生成的方法具有一个附加参数,该参数采用标头。我希望在方法签名中没有header参数的情况下生成方法。我已经阅读了文档,但是找不到任何参考。
例如,对于具有选项X-CUSTOM-HEADER参数的GET all API,swagger-codegen生成如下方法:
public List<SomeType> findAllUsingGET1(String optionalHeader)
Run Code Online (Sandbox Code Playgroud)
我希望在哪里:
public List<SomeType> findAllUsingGET1()
Run Code Online (Sandbox Code Playgroud)
寻找解决方法的指针,而不是自定义客户端代码的生成。
"get": {
"summary": "findAll",
"operationId": "findAllUsingGET1",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "X-CUSTOM-HEADER",
"in": "header",
"description": "Custom Header",
"required": false,
"type": "string"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "string"
}
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "Not Found"
}
}
}
Run Code Online (Sandbox Code Playgroud) java ×8
spring ×4
java-8 ×2
java-stream ×2
rest ×2
annotations ×1
autowired ×1
eclipse ×1
hibernate ×1
interceptor ×1
jpql ×1
mockito ×1
spring-boot ×1
testng ×1
unit-testing ×1
validation ×1