无法使用JpaRepository解析SpringMVC中的ResponseEntity

时间:2016-05-04 19:32:34

标签: java rest spring-mvc spring-data-jpa

这是我的控制器:

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)它似乎不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分: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 Validation实现,例如Hibernate Validator(它可以在没有Hibernate的ORM支持的情况下使用)。

可以在Spring参考文档的validation chapter中找到更多信息。

答案 1 :(得分:1)

您使用的是什么版本的Spring MVC?来自另一篇文章here。它声明Spring MVC 4.1及更高版本使用不同的语法。