我有一个Maven项目,在一个方法中,我想在我的资源文件夹中为目录创建一个路径.这样做是这样的:
try {
final URI uri = getClass().getResource("/my-folder").toURI();
Path myFolderPath = Paths.get(uri);
} catch (final URISyntaxException e) {
...
}
Run Code Online (Sandbox Code Playgroud)
生成的URI样子jar:file:/C:/path/to/my/project.jar!/my-folder.
堆栈跟踪如下:
Exception in thread "pool-4-thread-1" java.nio.file.FileSystemNotFoundException
at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
at java.nio.file.Paths.get(Paths.java:143)
Run Code Online (Sandbox Code Playgroud)
在URI似乎是有效的.之前的部分!指向生成的jar文件,以及之后的部分指向my-folder存档的根目录.我之前使用过这些说明来创建资源的路径.为什么我现在得到例外?
我有一个具有枚举属性的域对象,我想显示一个下拉列表,其中包含该对象表单中所有可能的枚举值.想象一下以下对象:
public class Ticket {
private Long id;
private String title;
private State state;
// Getters & setters
public static enum State {
OPEN, IN_WORK, FINISHED
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有一个方法,为这个对象呈现一个表单:
@RequestMapping("/tickets/new")
public String showNewTicketForm(@ModelAttribute Ticket ticket) {
return "tickets/new";
}
Run Code Online (Sandbox Code Playgroud)
模板看起来像这样:
<form th:action="@{/tickets}" method="post" th:object="${ticket}">
<input type="text" th:field="*{title}" />
<select></select>
</form>
Run Code Online (Sandbox Code Playgroud)
以后它应该转换成这样的东西:
<form action="/tickets" method="post">
<input type="text" name="title" />
<select name="state">
<option>OPEN</option>
<option>IN_WORK</option>
<option>FINISHED</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
如何创建选择标签?所选值也应自动映射到票证,以便我可以在控制器中执行以下操作:
@RequestMapping(value = "/tickets", method = RequestMethod.POST)
public String createTicket(@Valid Ticket ticket) {
service.createTicket(ticket);
return …Run Code Online (Sandbox Code Playgroud) 我创建了一个使用Thymeleaf作为模板引擎的Spring Boot Web应用程序.我配置了MessageSource在子文件夹中查找消息:
@Bean
public MessageSource messageSource() {
final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
return messageSource;
}
Run Code Online (Sandbox Code Playgroud)
在这个文件夹中,我创建了messages_de.properties包含内容的文件ticket.type.BUG=Fehler.在我的模板中,我尝试显示如下文本:
<p th:text="#{ticket.type.BUG}">BUG</p>
Run Code Online (Sandbox Code Playgroud)
但是当呈现页面时,我得到以下内容:
<p>??ticket.type.BUG_de_DE??</p>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我是否必须配置任何其他bean?
PS:
在"服务器端"我可以使用获取消息MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY).
我必须拥有一对多关系的类.当我尝试访问延迟加载的集合时,我得到了LazyInitializationException.我现在在网上搜索了一段时间,现在我知道我得到了异常,因为用于加载保存集合的类的会话已关闭.但是我没有找到解决方案(或者至少我不理解它们).基本上我有这些课程:
用户
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private long id;
@OneToMany(mappedBy = "creator")
private Set<Job> createdJobs = new HashSet<>();
public long getId() {
return id;
}
public void setId(final long id) {
this.id = id;
}
public Set<Job> getCreatedJobs() {
return createdJobs;
}
public void setCreatedJobs(final Set<Job> createdJobs) {
this.createdJobs = createdJobs;
}
}
Run Code Online (Sandbox Code Playgroud)
UserRepository
public interface UserRepository extends JpaRepository<User, Long> {}
Run Code Online (Sandbox Code Playgroud)
UserService
@Service
@Transactional
public class UserService {
@Autowired …Run Code Online (Sandbox Code Playgroud) 我想创建一个显示表单的网站.表单的字段取决于请求参数(以及表单支持bean).这是我的控制器,呈现不同的形式:
@Controller
public class TestController {
@Autowired
private MyBeanRegistry registry;
@RequestMapping("/add/{name}")
public String showForm(@PathVariable String name, Model model) {
model.addAttribute("name", name);
model.addAttribute("bean", registry.lookup(name));
return "add";
}
}
Run Code Online (Sandbox Code Playgroud)
相应的视图如下所示:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<form method="post" th:action="@{|/add/${name}|}" th:object="${bean}">
<th:block th:replace="|${name}::fields|"></th:block>
<button type="submit">Submit</button>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
以下是显示表单字段的示例片段:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<th:block th:fragment="fields">
<label for="firstName">First name</label><br />
<input type="text" id="firstName" th:field="*{firstName}" /><br />
<label for="lastName">Last name</label><br />
<input type="text" id="lastName" th:field="*{lastName}" />
</th:block>
</body>
</html> …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个应用程序,每次手机解锁时都会捕获照片.用户不应该看到已拍摄照片.所以它应该基本上像一个防盗应用程序.
我已经读过我应该使用虚拟SurfaceTexture,因此预览不会显示在屏幕上,但我无法捕捉照片.
这是我到目前为止所写的内容.这只是与Camera对象取得联系的示例活动:
package com.brushmate.chameleon;
import java.io.IOException;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.SystemClock;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.util.Log;
import android.view.SurfaceView;
public class SettingsActivity extends Activity {
private static final String TAG = "Chameleon Wallpaper";
@SuppressLint("NewApi") protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Log.d(TAG, "Activity created");
Camera cam = getCamera();
if (cam != null) {
Log.d(TAG, "Camera available");
SurfaceTexture dummy = new SurfaceTexture(0);
try {
cam.setPreviewTexture(dummy);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} …Run Code Online (Sandbox Code Playgroud) 我有两个用这些语句创建的表:
CREATE TABLE Behandlungsvorgang (
patientId SMALLINT NOT NULL REFERENCES Patient(id),
datum DATE NOT NULL,
notizen VARCHAR(100),
PRIMARY KEY (patientId, datum)
);
CREATE TABLE behandelt (
arztLogin VARCHAR(50) NOT NULL REFERENCES Arzt(login),
behandlungsDatum DATE NOT NULL,
behandlungsPatientId SMALLINT NOT NULL,
medikamntPzn SMALLINT NOT NULL REFERENCES Medikament(pzn),
krankheitName VARCHAR(50) NOT NULL REFERENCES Krankheit(name),
PRIMARY KEY (arztLogin, behandlungsDatum, behandlungsPatientId, medikamntPzn, krankheitName),
FOREIGN KEY (behandlungsDatum, behandlungsPatientId) REFERENCES Behandlungsvorgang(datum, patientId)
);
Run Code Online (Sandbox Code Playgroud)
我有一个方法应该将数据插入到这个表中.它总是插入新数据所以在插入之前behandelt我必须插入Behandlungsvorgang以满足外键要求.该方法如下所示:
public void add(TreatmentProcess tp) throws StoreException {
try …Run Code Online (Sandbox Code Playgroud) 构建器模式(在 Java 中)通常用这样的例子来说明:
public class MyClass {
private String member1;
private String member2;
// Getters & setters
public class MyClassBuilder {
private String nestedMember1;
private String nestedMember2;
public MyClassBuilder withMember1(String member1) {
this.nestedMember1 = member1;
return this;
}
public MyClassBuilder withMember2(String member2) {
this.nestedMember1 = member1;
return this;
}
public MyClass build() {
MyClass myClass = new MyClass();
myClass.member1 = nestedMember1;
myClass.member2 = nestedMember2;
return myClass;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们得到了两个非常相似的类,并且由于这种模式主要在我们拥有大量成员时应用,因此我们得到了大量相似之处。在我看来,这违反了 DRY 原则。
以下代码有什么问题?
public class MyClass {
private String member1; …Run Code Online (Sandbox Code Playgroud) 我有一个这样的字符串
String xyz ="JAVAxxxxxxxxxxxxxx ID: 123678 VERSION: 3"
Run Code Online (Sandbox Code Playgroud)
我想知道如何验证它是否符合特定模式。
我做这样的断言
assertThat(xyz).containsPattern("[A-Za-z]* ID: [0-9]* VERSION: [0-9]* ");
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Spring Data JDBC 用于我的 PostgreSQL 数据库。我定义了以下bean
@Data
class Report {
@Id
private Long id;
private String name;
private Set<Dimension> dimensions;
}
@Data
class Dimension {
private String name;
private Long[] filterIds;
}
Run Code Online (Sandbox Code Playgroud)
以及相应的DDL
CREATE TABLE report (
id bigserial PRIMARY KEY,
name text NOT NULL
);
CREATE TABLE dimension (
id bigserial PRIMARY KEY ,
report bigint,
name text,
filter_ids bigint[],
FOREIGN KEY (report) REFERENCES report(id) ON DELETE CASCADE ON UPDATE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
然后我尝试插入报告
final Dimension dimension = new …Run Code Online (Sandbox Code Playgroud)