【发布时间】:2019-11-29 09:29:48
【问题描述】:
我在运行更新后加载对象的所有属性时遇到问题。我的项目正在使用 Spring Boot 和 Spring 数据。 我的班级是这样配置的:
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Column(name = "cadastro", nullable = false, updatable = false)
private LocalDate cadastro;
private String nome;
private String ramoDeAtuacao;
// get() e set()
}
我的仓库:
@Repository
public interface ClienteRepository extends JpaRepository<Cliente, Long> {
}
请注意,当我使用 Save 方法创建新 Cliente 时,只会生成一次注册日期。此操作发生在我的 Service 中:
@Service
public class ClienteServiceImpl implements ClienteService {
private ClienteRepository repository;
@Autowired
public ClienteServiceImpl(ClienteRepository repository) {
this.repository = repository;
}
@Override
public Cliente save(Cliente cliente) {
cliente.setCadastro(LocalDate.now());
return repository.save(cliente);
}
@Override
public Cliente update(Cliente cliente) {
return repository.save(cliente);
}
}
我的控制器:
@RestController
@CrossOrigin
@RequestMapping(path = "/clientes")
public class ClienteController {
@Autowired
private ClienteService service;
@PutMapping
public ResponseEntity<?> atualiza(@RequestBody Cliente cliente) {
Cliente clienteAtualizado = service.atualiza(cliente);
return new ResponseEntity<Cliente>(clienteAtualizado, HttpStatus.OK);
}
}
这是为创建新客户端而发送的 JSON。
{
"nome": "Thiago",
"ramoDeAtuacao": "T.I."
}
返回的JSON有注册日期是这样的:
{
"id": 1,
"cadastro": "20/07/2019",
"nome": "Thiago",
"ramoDeAtuacao": "T.I."
}
现在,当我尝试升级时,我无法返回注册日期。这是更新的 JSON:
{
"id": 1,
"nome": "Thiago MF",
"ramoDeAtuacao": "Desenvolvedor"
}
返回的JSON没有注册日期,返回NULL:
{
"id": 1,
"cadastro": null,
"nome": "Thiago MF",
"ramoDeAtuacao": "Desenvolvedor"
}
如何解决?
【问题讨论】:
-
您使用的是 Spring Data Rest 自动生成的端点吗?如果没有,请添加您的控制器代码。还有你是怎么更新的。如果使用 SDR,则发送 PATCH 请求,因为您不包括所有字段。
-
您好艾伦·海,感谢您的留言。我添加了我的控制器类代码,我目前正在使用@PostMapping。我将检查 Path 的使用。至于问题,它不再发生。我听从了毗湿奴的建议,它奏效了。
标签: hibernate jpa spring-data-jpa spring-data spring-data-rest