如何将处理器映射到dto

问题描述

我正在构建一个MealPlanner应用程序,该应用程序将根据用户的偏好建立膳食菜单,并且我需要一些指导来设置DTO中的2个字段(字段名称:preferenceType,resultState)。

实体结构(称为膳食):

class Meal {
    String itemName; //Such as Pizza,Sandwich
    double portion; //such as 1.5
    double cost; //such as 15.5,default currency is dollars
}

DTO的结构:

class MealDTO {

    //Identical to Meal
    String itemName;
    double portion;
    double cost;

    //Additional fields in DTO
    String preferenceType; //FAT FREE,DAIRY FREE,VEGETARIAN
    String resultState; //OPTIMAL,FEASIBLE,INFEASIBLE
}

用于在两个类之间映射值的类:

public class FieldsMapper {

    // MealDTO -> Meal
    public Meal MealDtoToMeal(MealDTO mealDto) {
        Meal meal = new Meal();
        meal.setItemName(mealDto.getItemName());
        return meal;
    }

    //Meal -> MealDTO
    public MealDTO MealToMealDto(Meal meal) {
        MealDTO mealDto = new MealDTO();
        mealDto.setItemName(meal.getItemName());
        mealDto.setPortion(meal.getPortion());
        mealDto.setCost(meal.getCost());
        return mealDto;
    }
}

Please click here: MealPlanner full flow

这样,preferenceType和cost的值就会丢失。 如何将preferenceType,resultState映射到DTO?

(注意:膳食计划程序流程按步骤

  1. 将用户请求(仅包含itemName)映射到MealDTO(itemName以外的其他字段为空)。
  2. 使用FieldsMapper将MealDTO映射到Meal。
  3. 将餐点传递给第三方(黑匣子逻辑)。此逻辑将返回结构为{}
  4. 的映射
  5. 该部分和费用映射到“膳食实体字段”部分,费用。
  6. 将Meal映射到MealDTO并返回DTO对象。

解决方法

首先,我认为您的resultState和preferenceType字段应该使用枚举而不是String,因为它们具有固定值。

我认为您应该做的是创建另一个DTO,其中包含MealDTO以及resultState和preferenceType字段,例如UserMealDTO。像这样:

class UserMealDTO {
    MealDTO meal;
    MealPreference preferenceType;
    ResultState resultState; 
}

// Enums 

public enum MealPreference {
    FAT FREE,DAIRY FREE,VEGETARIAN;
}

public enum ResultState {
    OPTIMAL,FEASIBLE,INFEASIBLE;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...