小编Jan*_*sen的帖子

Spring Data REST:"没有String-argument构造函数/工厂方法从String值反序列化"

当我在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 spring lombok java-8 spring-data-rest

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

Java 8流:相同项的单位总和

是否有一种简洁的方法可以将列表中相同类型的项目的单元与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)

java-8 java-stream

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

如何在spring reactor中将两个发布者合二为一

我已经实现了一个虚拟的反应式存储库,但我正在努力使用更新方法:

@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)

这是正确的吗?

project-reactor spring-webflux

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

Angular CLI安装失败

安装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-cli angular2-cli

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

Heroku部署错误:"找不到名称'require'."

将基于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)

heroku angular

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

Angular 4.0.3:Uncaught TypeError:无法读取undefined的属性'apply'

升级我的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)

angular-cli angular

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

HAL 中的 HATEOAS POST 链接

如何在 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)

java hateoas spring-hateoas spring-boot

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

jline2 中 CTRL+C 是如何处理的

我很难理解如何在 jline2 中处理CTRL+ C。我发现consoleReader.readline如果handleUserInterrupt设置为true就会抛出异常。但是我想知道在抛出这个异常之前,CTRL+C是如何被捕获和解释的(而不是退出程序)?

java unix jline sigint shutdown-hook

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

@RepositoryEventHandler事件使用@RepositoryRestController停止

当我@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)

java-8 spring-data spring-data-rest spring-boot

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

JAR 中的 Spring Boot ClassPathResource

在我的 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 spring spring-boot

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