Spring返回域

时间:2016-12-21 04:06:32

标签: spring spring-mvc

我有以下域名,需要返回选定的字段以响应客户端。如何使用Spring实现这一目标?

public class Vehicle {

    private String vehicleId;
    private Long dateCreated;
    private String ownerId;
    private String colourCode;
    private String engineNumber;
    private String transmission;

    //getters & setters

    }

我的目标是仅将colourCodetransmission字段返回给客户请求。我已经阅读了DTO,看起来我可以用DTO实现我的目标,但我找不到任何好的例子来实现它。 DTO是实现目标的正确方法吗?

4 个答案:

答案 0 :(得分:2)

基本上你只需要用你需要的参数创建VehicleDTO类

public class VehicleDTO {
    private String colourCode;
    private String transmission;
    //getters and setters
}

然后在你的代码中从Vehicle类构造VehicleDTO。幸运的是,我们有来自Spring的 BeansUtils 类,它使用反射将一个对象的属性复制到另一个对象,因为您不想重复逻辑来复制每个对象的属性。所以它会是这样的:

  BeanUtils.copyProperties(v1, dto);

最后,您在回复中返回VehicleDTO而不是车辆

答案 1 :(得分:0)

您可以返回IVehicle界面,该界面会公开您选择的属性

public interface IVehicle {
   String getTransmission();
   String getColourCode();
}

和你的Vehicle实施它

public class Vehicle implements IVehicle{ } 

答案 2 :(得分:0)

有多种方法可以达到你想要的效果。

您可以为资源添加相关的usecase / APi特定DTO。

e.g。如果您的API返回了车辆的一般细节,您可能希望公开某些级别的详细信息,

public class VehicleDetailsDTO {
    private String colourCode;
    private String transmission;
    private String engineNumber; //more
    //getters and setters
}

然后,您可以使用BeanUtilsDozzerVehical资源转换为可移动对象,例如DTO

BeanUtils:http://commons.apache.org/proper/commons-beanutils/

Dozzer:http://dozer.sourceforge.net/documentation/mappings.html

答案 3 :(得分:0)

假设您使用JSON作为输出格式而Jackson作为序列化引擎(在Spring MVC中默认使用),您可以tell Jackson to not serialize null properties。现在您只需要填充所需的属性并返回原始业务对象。