gpt4 book ai didi

java - Spring Boot 中的 "Unsupported Media Type"- Windows

转载 作者:行者123 更新时间:2023-11-30 01:47:57 25 4
gpt4 key购买 nike

我有一个像这样的User类:

@Data
@Entity
public class User {
@Id
@GeneratedValue
Long userID;

String eMail;

String passwordHash;

//ArrayList<ClassRoom>adminOf=new ArrayList<>();

User() {}

public User(String eMail, String passwordHash) {
this.eMail = eMail;
this.passwordHash = passwordHash;
}
}

LoadDatabase 类中,我有:

@Bean
CommandLineRunner initDatabase(UserRepository userRepository) {
return args -> {
log.info("Preloading " + userRepository.save(new User("admin@admin.com", "asdasd")));
log.info("Preloading " + userRepository.save(new User("admin@admin.com", "12345")));
};
}

这给了我这个:

spring boot pre-loading

现在,当我给出curl -v localhost:8080/user这个命令时,它给了我这个:

spring-boot curl get

这是非常正确的,尽管它给了我电子邮件而不是电子邮件

但是当我给予

curl -X PUT localhost:8080/user/3 -H 'Content-type:application/json' -d '{"passwordHash":"12345","email":"admin1@admin.com"}'

它说:

spring-boot curl post

这真是太可怕了。我正在关注this教程。

这是我的 UserController 类:

package com.mua.cse616.Controller;


import com.mua.cse616.Model.User;
import com.mua.cse616.Model.UserNotFoundException;
import org.springframework.web.bind.annotation .*;

import java.util.List;

@RestController
class UserController {

private final UserRepository repository;

UserController(UserRepository repository) {
this.repository = repository;
}

// Aggregate root

@GetMapping("/user")
List<User> all() {
return repository.findAll();
}

@PostMapping("/user")
User newUser(@RequestBody User newUser) {
return repository.save(newUser);
}

// Single item

@GetMapping("/user/{id}")
User one(@PathVariable Long id) {

return repository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}

@PutMapping("/user/{id}")
User replaceUser(@RequestBody User newUser, @PathVariable Long id) {

return repository.findById(id)
.map(employee -> {
employee.setEMail(newUser.getEMail());
employee.setPasswordHash(newUser.getPasswordHash());
return repository.save(employee);
})
.orElseGet(() -> {
newUser.setUserID(id);
return repository.save(newUser);
});
}

@DeleteMapping("/user/{id}")
void deleteUser(@PathVariable Long id) {
repository.deleteById(id);
}
}

更新后放置方法:

@PutMapping(path="/user/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
User replaceUser(@RequestBody User newUser, @PathVariable Long id) {

return repository.findById(id)
.map(employee -> {
employee.setEMail(newUser.getEMail());
employee.setPasswordHash(newUser.getPasswordHash());
return repository.save(employee);
})
.orElseGet(() -> {
newUser.setUserID(id);
return repository.save(newUser);
});
}

现在出现两个问题

  • 为什么使用电子邮件而不是电子邮件,如何获取电子邮件而不是电子邮件
  • 如何正确POST,我做错了什么?

最佳答案

为什么电子邮件而不是电子邮件” - 这只是 Jackson 的默认行为。

如何获取电子邮件而不是电子邮件” - 您可以通过 POJO 上的注释来控制 Jackson 的行为。这里相关的是@JsonProperty。请参阅this question了解详情。

如何正确POST,我做错了什么?” - 你的意思是PUT而不是POST,不是吗?定义方法使用的内容类型:

@PutMapping(path="/user/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
User replaceUser(@RequestBody User newUser, @PathVariable Long id) {
...
}

此外,正如 @rimonmostafiz 所指出的,您需要重新定义 curl 调用,转义引号:

curl -X PUT -H "Content-Type: application/json" -d "{ \"email\": \"asd\", \"passwordHash\": \"sad\" }"

顺便说一句:请limit yourself to one question per post future 。

关于java - Spring Boot 中的 "Unsupported Media Type"- Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com