我开始喜欢Lambda的表达,但我正在努力通过这面墙:
public class CompanyWithEmployees {
public CompanyWithEmployees() { }
public Company CompanyInfo { get; set; }
public List<Person> Employees { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的搜索:
List<CompanyWithEmployees> companiesWithEmployees = ws.GetCompaniesWithEmployees();
CompanyWithEmployees ces = companiesWithEmployees
.Find(x => x.Employees
.Find(y => y.PersonID == person.PersonID));
Run Code Online (Sandbox Code Playgroud)
所以,我想获得具有我正在寻找的那个Person(Employee)的Object"CompanyWithEmployees",但我得到" 不能隐含地将'Person'转换为'bool') "这是正确的,但如果我'我没有传递Person对象,第一个Find怎么执行?
我遇到了Spring和post请求的问题.我正在为Ajax调用设置一个控制器方法,请参阅下面的方法定义
@RequestMapping(value = "add.page", method = RequestMethod.POST)
@ResponseBody
public Object createComment(
@RequestParam(value = "uuid", required = false) String entityUuid,
@RequestParam(value = "type", required = false) String entityType,
@RequestParam(value = "text", required = false) String text,
HttpServletResponse response) {
....
Run Code Online (Sandbox Code Playgroud)
无论我以何种方式进行HTML调用,@RequestParam参数的值始终为null.我有很多其他方法看起来像这样,主要区别在于其他方法是GET方法,而这一方法是POST.是不是可以使用@RequestParamPOST方法?
我正在使用Spring版本3.0.7.RELEASE - 有谁知道问题的原因可能是什么?
Ajax代码:
$.ajax({
type:'POST',
url:"/comments/add.page",
data:{
uuid:"${param.uuid}",
type:"${param.type}",
text:text
},
success:function (data) {
//
}
});
Run Code Online (Sandbox Code Playgroud) 简而言之,我的问题是如何使用Spring数据JPA保存具有预设主键(而不是null)的实体.
为了解释,请考虑一个名为的简单实体类Customer.请记住,id未设置为自动增量,并且必须是自定义唯一值.这只是一个小例子.我需要在我的实际表中的id是一个自定义的唯一的,像用户名.
@Entity
@Table(name = "customer")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "cust_id", nullable = false)
private Integer custId;
@Column(name = "first_name", length = 30)
private String firstName;
@Column(name = "last_name", length = 30)
private String lastName;
//getter, setters
}
Run Code Online (Sandbox Code Playgroud)
而且,我有CustomerRepository作为
@Repository
public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}
Run Code Online (Sandbox Code Playgroud)
现在,我想我必须插入一个id为101的新客户记录.预期的方法是:
Customer customer = new Customer();
customer.setCustId(101);
customer.setFirstName("Some");
customer.setLastName("Name");
repository.save(customer);
Run Code Online (Sandbox Code Playgroud)
但是,它repository.save()不会插入ID为101的新客户.那么,我该怎么做呢?
我已经下载并测试了这两个映射库.我编写了一个程序,它有100000个迭代并映射同一个类的bean:
public class IntBean {
@JMap
private int int1;
@JMap
private int int2;
.
.
.
@JMap
private int int10;
}
Run Code Online (Sandbox Code Playgroud)
在迭代开始之前创建映射器:
private JMapper jmapper = new JMapper(IntBean.class, IntBean.class);
private MapperFactory orikaFactory = new DefaultMapperFactory.Builder().build();
private MapperFacade orikaFacade = null;
orikaFactory.registerClassMap(orikaFactory.classMap(IntBean.class,IntBean.class).byDefault().toClassMap());
orikaFacade = orikaFactory.getMapperFacade();
Run Code Online (Sandbox Code Playgroud)
每次迭代都是什么:
this.orikaFacade.map(a1, a2);
Run Code Online (Sandbox Code Playgroud)
要么
a2 = (A) this.jmapper2.getDestination(a1);
Run Code Online (Sandbox Code Playgroud)
手绘图:1ms
Orika映射:32ms
手绘图:6ms高速!!!
推土机:1140毫米
我知道,Orika和Jmapper是来自谷歌的优秀图书馆,他们使用的反射方式与Dozer不同,后者速度要慢得多,他们反思以某种方式生成代码.
我有3个问题:
1)它们是如何工作的 - 当代码生成时,在maven构建期间,在运行时 - 每次我在代码中创建映射器时?当我创建映射器时,它们是否会动态更改类代码字节.
2)为什么我注意到这个速度差异?如果以某种方式生成代码,那么为什么会有不同的结果
3)您会选择哪个库?为什么?两者都具有相同的功能?为什么两者都来自谷歌?为什么Google没有开发Orika而是创建了Jmapper?
在这里,它说Spring Boot 1.5.2.RELEASE需要Java 7或更高版本; 和Java 1.6作为默认编译器级别.
那么这种差异会导致问题吗?
我有一个spring-boot 2.1.2.RELEASE应用程序,该应用程序使用嵌入式tomcat Web服务器并通过其SDK 使用OpenKM。
现在,我有一些集成测试,这些测试使用restassuredlib进行REST调用并验证响应结构。我的想法是将其集成OpenKM.war到此嵌入式tomcat中,并能够运行此测试,而无需在其他服务器上运行openkm应用程序。
这就是我使嵌入式tomcat读取和部署openkm.war的方式:
@Configuration
public class TomcatConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
@Override
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
new File(tomcat.getServer().getCatalinaBase(), "webapp").mkdirs();
try {
tomcat.addWebapp("/okm", new ClassPathResource("webapp/openkm.war").getFile().toString());
} catch (Exception ex) {
throw new IllegalStateException("Failed to add okm", ex);
}
return super.getTomcatWebServer(tomcat);
}
}; …Run Code Online (Sandbox Code Playgroud) AsyncAppender当我们FileAppender使用自定义布局实现将其链接时,Logback 不会记录日志。我用下面FileAppender与自定义实现com.myorg.log.MaskingPatternLayout下LayoutWrappingEncoder。
以下是该logback.xml文件的摘要:
//Not Working with AsycnAppender
<appender name="FILE_ASYNC_CUSTOM" class="ch.qos.logback.core.FileAppender">
<file>log/async.log</file>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.myorg.log.MaskingPatternLayout">
<patternsProperty>password,dateOfBirth</patternsProperty>
<pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</layout>
</encoder>
</appender>
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE_ASYNC_CUSTOM" />
</appender>
//Working with AsycnAppender
<appender name="FILE_ASYNC_NO_CUSTOM" class="ch.qos.logback.core.FileAppender">
<file>log/async.log</file>
<encoder>
<pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE_ASYNC_NO_CUSTOM" />
</appender>
Run Code Online (Sandbox Code Playgroud)
以下是的自定义实现PatternLayout。
@Slf4j
public class MaskingPatternLayout extends PatternLayout {
private String patternsProperty;
private …Run Code Online (Sandbox Code Playgroud) 我有一类这样的:
@Data
@Component
@ConfigurationProperties("a.config.props")
public class ClientProperties {
private String hostname;
private String port;
private String baseUrl;
private String endpoint;
}
Run Code Online (Sandbox Code Playgroud)
我有数十个属性上下文,但对于 1 行,我必须重复整个课程。是否有一种简单而优雅的方法来拥有一个类并以某种方式动态传递属性上下文(可能是一个数组或类似的东西),以便我使用相同的类。
如下所示,
LocalDateTime currentUTCTime = LocalDateTime.now(ZoneId.of("UTC"));
String reqPattern = currentUTCTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));
System.out.println("Required pattern: " + reqPattern);
GregorianCalendar calendar = GregorianCalendar.from(currentUTCTime.atZone(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);
System.out.println("But Showing As :" + xcal);
Run Code Online (Sandbox Code Playgroud)
我希望输出为2015-06-18 11:59:15:135,但是当我设置xcal为XML标记时XMLGregorianCalender,它显示为2015-06-18T11:59:15.135+05:30.
我该如何删除该+05:30部分?
我在Spring Boot中创建了一个实用程序,用于以更通用的方式将数据连接和插入/添加到沙发床中。
我有这样的事情:
public interface GenericRepository extends CouchbaseRepository<MyClass, String> {
}
Run Code Online (Sandbox Code Playgroud)
在那里我有MyClass我愿意接受任何形式的文件插入到couchbase。
我尝试了一些类似使用通用类型T的操作,但没有成功,因为出现以下错误:
原因:org.springframework.data.mapping.MappingException:找不到类型类java.lang.Object的PersistentEntity!
我的结构是:服务(接口/ Impl)> DAO(接口/ Impl)>存储库
额外信息:在上述模型中,我传递了通用类型T。我通过带有@Document注释的Pojo调用服务。
目标是消除每种文档类型具有一个存储库类的“依赖性”。
java ×6
spring ×4
spring-boot ×4
c# ×1
couchbase ×1
generics ×1
java-8 ×1
java-time ×1
lambda ×1
logback ×1
mapping ×1
openkm ×1
orika ×1
properties ×1
spring-mvc ×1