Я использую более новую версию Spring-boot в своем проекте, поэтому вместо использования findById (Long id) я использую getOne (Long id) (у меня не работал дополнительный findById).Мой метод "сохранить новую форму" работает нормально, и база данных SQL создает идентификатор для отправленной формы (он же брокер).Но при редактировании формы я не могу получить доступ к существующему идентификатору и получаю нулевую ошибку.Может ли кто-нибудь, пожалуйста, указать мне правильное направление здесь.Это происходит из-за того, что я использую метод getOne, который возвращает ноль, или что-то еще вызывает эту проблему?
Вот стек трассировки, показывающий ошибку 500 для нулевого идентификатора.
2019-03-08 14:58:32.416 DEBUG 988 --- [p-nio-64-exec-1] o.s.web.servlet.DispatcherServlet : "ERROR" dispatch for POST "/error", parameters={masked}
2019-03-08 14:58:32.417 DEBUG 988 --- [p-nio-64-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2019-03-08 14:58:32.418 DEBUG 988 --- [p-nio-64-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
2019-03-08 14:58:32.418 DEBUG 988 --- [p-nio-64-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [{timestamp=Fri Mar 08 14:58:32 PST 2019, status=500, error=Internal Server Error, message=The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null!, path=/saveBroker}]
2019-03-08 14:58:32.419 DEBUG 988 --- [p-nio-64-exec-1] o.s.web.servlet.DispatcherServlet : Exiting from "ERROR" dispatch, status 500
Вот мои функции контроллера:
@RequestMapping(value="/newBroker")
public String newBroker(Model model){
model.addAttribute("broker",new Broker());
return "brokerProfile";
}
@RequestMapping(value="/addBroker")
public String addBroker(Model model, @ModelAttribute(value="broker") Broker broker)
{
Long id=null;
try{
Broker newBroker = brokerRepository.save(broker);
id = newBroker.getId();
if (broker.getStatus().equals("active"))
broker.setOnboardedDate(LocalDate.now());
brokerRepository.save(newBroker);
}catch (DataAccessException e){
e.printStackTrace();
}
return "redirect:/edit/"+id;
}
@RequestMapping(value="/edit/{id}")
public String editbroker(Model model, @PathVariable("id") Long id, Broker broker){
Broker existing= brokerRepository.getOne(id);
model.addAttribute("broker",existing);
return "brokerProfile";
}
@RequestMapping(value="/saveBroker")
@ResponseBody
public JSONObject saveBroker(Model model, @ModelAttribute(value="broker") Broker broker)
{
Boolean saved=false;
JSONObject response=new JSONObject();
Broker brokerBeforeUpdate = brokerRepository.getOne(broker.getId());
if (brokerBeforeUpdate!=null && !brokerBeforeUpdate.getStatus().equals("active") && broker.getStatus().equals("active"))
broker.setOnboardedDate(LocalDate.now());
else if (!broker.getStatus().equals("active"))
broker.setOnboardedDate(null);
try{
brokerBeforeUpdate=brokerRepository.save(broker);
saved=true;
response.put("brokerId",broker.getId());
}catch (DataAccessException e) {
e.printStackTrace();
response.put("error",e.getLocalizedMessage());
response.put("cause",e.getLocalizedMessage());
}
response.put("success",saved);
return response;
}
}
Мой репозиторий с сохранением для getOne () / findById
public interface BrokerRepository extends CrudRepository<Broker,Long>, JpaSpecificationExecutor {
Broker save(Broker entity);
// <Optional>Broker findById(Long id);
Broker getOne(Long id);
void delete(Broker entity);
List<Broker> findAll();
}
Broker.часть Java, относящаяся к ID
@Entity
@Table(name="Broker")
public class Broker {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "brokerId")
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}