问题描述
我正在构建一个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?
(注意:膳食计划程序流程按步骤
- 将用户请求(仅包含itemName)映射到MealDTO(itemName以外的其他字段为空)。
- 使用FieldsMapper将MealDTO映射到Meal。
- 将餐点传递给第三方(黑匣子逻辑)。此逻辑将返回结构为{
, , , } 的映射
- 该部分和费用映射到“膳食实体字段”部分,费用。
- 将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;
}