当我在Spring Data REST应用程序中使用Lombok来定义复杂类型时:
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Table(name = "BOOK")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
private String title;
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
private Person author;
// ...
}
Run Code Online (Sandbox Code Playgroud)
使用Spring Data REST控制器,例如:
@RepositoryRestController
public class BookRepositoryRestController {
private final BookRepository repository;
@Autowired
public BookRepositoryRestController(BookRepository repository) {
this.repository = repository;
}
@RequestMapping(method = RequestMethod.POST,value = "/books")
public @ResponseBody PersistentEntityResource post(
@RequestBody Book book,
PersistentEntityResourceAssembler assembler) {
Book entity = processPost(book);
return assembler.toResource(entity); …Run Code Online (Sandbox Code Playgroud) 是否有一种简洁的方法可以将列表中相同类型的项目的单元与Java 8流相加?例如,假设我有三个项目的列表:
{id: 10, units: 1}
{id: 20, units: 2}
{id: 10, units: 1}
Run Code Online (Sandbox Code Playgroud)
我喜欢这样的摘要流:
{id: 10, units 2}
{id: 20, units 2}
Run Code Online (Sandbox Code Playgroud)
它总结了相同id的项目单位.有任何想法吗?
这是Federico的解决方案(使用Lombok):
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class So44348207 {
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item(10,1), new Item(20,2), new Item(10, 1)
);
Map<Long, Integer> results = items.stream().collect(
Collectors.toMap(
Item::getId,
Item::getUnits,
Integer::sum
)
);
results.forEach( (k,v) -> System.out.println(
String.format("{id: %d, units: %d}", k,v))
);
}
@Data
@AllArgsContructor
public …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个虚拟的反应式存储库,但我正在努力使用更新方法:
@Override
public Mono<User> updateUser(int id, Mono<User> updateMono) {
return //todo with getUser
}
@Override
public Mono<User> getUser(int id) {
return Mono.justOrEmpty(this.users.get(id));
}
Run Code Online (Sandbox Code Playgroud)
一方面我有新的出版商Mono<User> updateMono,另一方面我在Mono.justOrEmpty(this.users.get(id)).
如何将其组合在一起,进行更新并只回馈一个发布者?
我唯一想到的是:
@Override
public Mono<User> updateUser(int id, Mono<User> updateMono) {
return getUser(id).doOnNext(user -> {
updateMono.subscribe(update -> {
users.put(id, new User(id, update.getName(), update.getAge()));
System.out.format("Updated user with id %d to %s%n", id, update);
});
});
}
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?
安装Angular CLI(angular-cli@1.0.0-beta.16)npm install -g angular-cli@latest失败,并出现以下错误npm-debug.log:
Error: The package webpack@2.1.0-beta.22 does not satisfy its siblings' peerDependencies requirements!
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/lib/install.js:125:32
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/lib/install.js:268:7
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/read-installed/read-installed.js:142:5
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/read-installed/read-installed.js:263:14
at cb (/home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/read-installed/read-installed.js:263:14
at cb (/home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/read-installed/read-installed.js:263:14
at cb (/home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/slide/lib/async-map.js:47:24)
at /home/jan/.nvm/versions/io.js/v3.3.1/lib/node_modules/npm/node_modules/read-installed/read-installed.js:263:14
Run Code Online (Sandbox Code Playgroud)
安装在Node 3.3的控制台上生成以下内容; 并且在Node 4.6上同样失败:
npm install -g angular-cli@latest
npm WARN engine angular-cli@1.0.0-beta.16: wanted: {"node":">= 4.1.0"} (current: {"node":"3.3.1","npm":"2.14.3"})
npm WARN engine common-tags@1.3.1: wanted: {"node":">=4.0.0"} (current: {"node":"3.3.1","npm":"2.14.3"})
npm WARN peerDependencies The peer dependency webpack@* included from html-webpack-plugin …Run Code Online (Sandbox Code Playgroud) 将基于Angular 2 Node的应用程序部署到Heroku会触发此错误:
94% asset optimizationError in bail mode: [default] /tmp/build_47b0228d68fca7157f36b354e7868841/src/app/account/account-list.component.ts:13:12
remote: Cannot find name 'require'.
remote:
remote: npm ERR! Linux 3.13.0-100-generic
remote: npm ERR! argv "/tmp/build_47b0228d68fca7157f36b354e7868841/.heroku/node/bin/node" "/tmp/build_47b0228d68fca7157f36b354e7868841/.heroku/node/bin/npm" "install" "--unsafe-perm" "--userconfig" "/tmp/build_47b0228d68fca7157f36b354e7868841/.npmrc"
remote: npm ERR! node v6.6.0
remote: npm ERR! npm v3.10.8
remote: npm ERR! code ELIFECYCLE
remote: npm ERR! fm-ui@2.0.0-alpha.6 postinstall: `ng build -prod`
remote: npm ERR! Exit status 1
Run Code Online (Sandbox Code Playgroud) 升级我的Angular 4.0.2应用程序后Angular 4.0.3,我在Chrome控制台中收到以下错误:
zone.js:1265 Uncaught TypeError: Cannot read property 'apply' of undefined
at XMLHttpRequest.desc.get [as ontimeout] (zone.js:1265)
at XHRLocalObject.AbstractXHRObject._cleanup (abstract-xhr.js:149)
at XMLHttpRequest.xhr.onreadystatechange (abstract-xhr.js:125)
at XMLHttpRequest.wrapFn (zone.js:1230)
at ZoneDelegate.invokeTask (zone.js:398)
at Zone.runTask (zone.js:165)
at XMLHttpRequest.ZoneTask.invoke (zone.js:460)
Run Code Online (Sandbox Code Playgroud) 如何在 HAL 中描述 POST 链接?
我正在设计一个带有 HATEOAS 约束的 RESTful API,类似于维基百科的 HATEOAS 示例,但以 HAL JSON 表示(为了清楚起见,删除了方案、主机等):
GET /accounts/12345
{
"id" : 12345,
"balance" : 100.00
"_links" : {
"self" : {
"href" : "/accounts/12345"
},
"transfer" : {
"href" : "/accounts/12345/transfer{?amount,target}",
"templated" : true
}
}
}
Run Code Online (Sandbox Code Playgroud)
要执行“传输”操作,客户端可能会执行以下操作:
GET /accounts/12345/transfer?amount=100.00,target=54321
{
"id" : 34567,
"amount" : 100.00
"_links" : {
"self" : {
"href" : "/transfers/34567"
},
"source" : {
"href" : "/account/12345"
},
"target" : {
"href" : …Run Code Online (Sandbox Code Playgroud) 我很难理解如何在 jline2 中处理CTRL+ C。我发现consoleReader.readline如果handleUserInterrupt设置为true就会抛出异常。但是我想知道在抛出这个异常之前,CTRL+C是如何被捕获和解释的(而不是退出程序)?
当我@RepositoryRestController为一个实体创建一个实体时,相关的@RepositoryEventHandler方法不是通过Spring Boot 1.4.0.M3(也是Spring Boot 1.3.5)在Spring Data REST中触发的 - 这是一个bug,还是设计的?
我有一个Account实体@RepositoryEventHandler:
@Slf4j
@Component
@RepositoryEventHandler(Account.class)
public class AccountEventBridge {
@HandleBeforeCreate
public void handleBeforeCreate(Account account){
log.info("Before create " + account);
}
@HandleAfterCreate
public void handleAfterCreate(Account account){
log.info("Created " + account);
}
}
Run Code Online (Sandbox Code Playgroud)
在POST时它会触发它们:
curl -H "Content-Type: application/json" -X POST
-d '{"name":"aaa", "owner":{"email":"aaa@1010","password":"snap"}}'
http://localhost:8080/api/accounts
Run Code Online (Sandbox Code Playgroud)
除非我添加@RepositoryRestController:
@RepositoryRestController
public class AccountRespositoryRestController {
private final AccountRepository repository;
@Autowired
public AccountRespositoryRestController(AccountRepository repository) {
this.repository = repository; …Run Code Online (Sandbox Code Playgroud) 在我的 Spring Boot 1.5 应用程序中,我ClassPathResource用来读取应用程序 JAR 的静态文件:
// ...
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
@Slf4j
@Service
public class MyService {
private Resource resource = new ClassPathResource("a.txt");
private List<String> myStrings;
public MyService() {
myStrings = load(resource);
}
private List<String> load(Resource resource) {
try(Stream<String> stream = Files.lines(Paths.get(resource.getURI()))) {
myStrings = stream.filter(/* my filter */)
.collect(Collectors.toList());
} catch (IOException x) {
log.error("Failed to read '{}'.", resource.getFilename());
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这失败了:
Caused by: java.nio.file.FileSystemNotFoundException: null
at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171) ~[zipfs.jar:1.8.0_121]
at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157) ~[zipfs.jar:1.8.0_121]
at java.nio.file.Paths.get(Paths.java:143) …Run Code Online (Sandbox Code Playgroud) java ×4
java-8 ×3
spring-boot ×3
angular ×2
angular-cli ×2
spring ×2
angular2-cli ×1
hateoas ×1
heroku ×1
java-stream ×1
jline ×1
lombok ×1
sigint ×1
spring-data ×1
unix ×1