无法使用 JpaRepository 在 SpringMVC 中解析 ResponseEntity
Posted
技术标签:
【中文标题】无法使用 JpaRepository 在 SpringMVC 中解析 ResponseEntity【英文标题】:Cannot resolve ResponseEntity in SpringMVC using JpaRepository 【发布时间】:2016-08-30 09:45:54 【问题描述】:这是我的控制器:
package com.hodor.booking.controller;
import com.hodor.booking.jpa.domain.Vehicle;
import com.hodor.booking.service.VehicleService;
import com.wordnik.swagger.annotations.Api;
import org.apache.commons.lang.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/api/v1/vehicles")
@Api(value = "vehicles", description = "Vehicle resource endpoint")
public class VehicleController
private static final Logger log = LoggerFactory.getLogger(VehicleController.class);
@Autowired
private VehicleService vehicleService;
@RequestMapping(method = RequestMethod.GET)
public List<Vehicle> index()
log.debug("Getting all vehicles");
return vehicleService.findAll();
@RequestMapping(value="/save", method=RequestMethod.POST, consumes="application/json")
@ResponseBody
public Vehicle setVehicle(@RequestBody Vehicle vehicle)
log.debug("Inserting vehicle");
if (vehicle.getLicensePlate() == null)
return new ResponseEntity<Void>(HttpStatus.CONFLICT);
return vehicleService.saveVehicle(vehicle);
我想在上面的 If-Guard 中实现的是,如果车辆对象没有 LicensePlate 成员,则发回相应的 HTTP 状态标头 CONFLICT 或其他内容。
我来自 Node 和 Express 背景,我习惯于设置我的标题、发送响应并完成它。但是在这种情况下(JPA)它似乎不起作用。有什么想法吗?
【问题讨论】:
【参考方案1】:另一种方法是利用 Spring 的验证支持对 POJO 进行声明式添加验证。基本上,您向 Vehicle
类添加注释,例如:
public class Vehicle
@NotNull
private LicensePlate licensePlate;
// getters, setters
然后在控制器方法中添加@Valid
注释:
@ResponseBody
public Vehicle setVehicle(@RequestBody @Valid Vehicle vehicle)
log.debug("Inserting vehicle");
return vehicleService.saveVehicle(vehicle);
如果验证失败,Spring 将返回 400 响应。
确保您的类路径上有 JSR-303/JSR-349 Bean 验证实现,例如 Hibernate Validator(它可以在没有 Hibernate 的 ORM 支持的情况下使用)。
更多信息可以在 Spring 参考文档的validation chapter 中找到。
【讨论】:
我现在正在使用来自此类“javax.validation.constraints.NotNull”的@NotNull
注释。如果 null 为真,则返回 500 服务器错误,Fair Enough 作为奖励,是否也有这样的注释? docs.oracle.com/javaee/7/api/javax/validation/constraints/…。认为我找到了它:@Future
注释 - ***.com/questions/11624532/…【参考方案2】:
您使用的是哪个版本的 Spring MVC?来自另一个帖子How to respond with HTTP 400 error in a Spring MVC @ResponseBody method returning String?。它指出 Spring MVC 4.1 及更高版本使用不同的语法。
【讨论】:
以上是关于无法使用 JpaRepository 在 SpringMVC 中解析 ResponseEntity的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + JPA 多模块项目无法注入 JpaRepository 接口