当前位置: 首页 > 知识库问答 >
问题:

如何在Spring MVC中创建允许从菜单中选择项目及其数量的表单?

赫连泰宁
2023-03-14

但如何将其转换为OrderDto实体?我很难理解如何在DTO的地图中同时输入盘子ID和数量。

下面是一个超文本标记语言菜单的例子(只是多个单菜单类div所在的菜单类div)。

<div class="wrapper">
<div class="title">
   <h4><span>Good food and great vibes</span>our menu</h4>
</div>
<div class="menu">
<div class="single-menu" th:each="dish : ${dishList}">
   <img src="https://via.placeholder.com/150" alt="" />
   <div class="menu-content">
      <h4 th:text="${dish.nameEng}">chicken fried salad <span>$45</span></h4>
      <p>
         Aperiam tempore sit,perferendis numquam repudiandae porro
         voluptate dicta saepe facilis.
      </p>
      <div class="myContainer m-1">
         <button class="decrement" data-type="decrement" onclick="stepper(this)">-</button>
         <input
            type="number"
            min="0"
            max="100"
            step="1"
            value="0"
            readonly
            />
         <button class="increment" data-type="increment" onclick="stepper(this)">+</button>
      </div>
   </div>
</div>

以下是DTO的一个示例:

public class OrderDto {
    private String userEmail;
    private String userName;
    Map<Dish, Integer> DishQuantityMap;
}

共有1个答案

蒋弘致
2023-03-14

如果您可以以id to count格式发送DishQuantityMap,比如Map,那就更好了

OrderDto类——就像你的例子一样,不要忘记getter和setter。

我假设Dish类看起来像这样:

public class Dish {


  private Long id;
  private String name;
  private String description;

  //default constructor, getters and setters
  //since it is a key in a map you need proper overrides of hashCode() and equals()
}

我还假设您正在使用Jackson进行序列化/反序列化。Jackson不能只是将自定义对象反序列化为密钥,所以您需要为您的盘创建并注册KeyDeserializer。例如:

public class DishKeyDeserializer extends KeyDeserializer {

  private static final ObjectMapper MAPPER = new ObjectMapper();

  @Override
  public Object deserializeKey(String key, DeserializationContext context) throws IOException {
    return MAPPER.readValue(key, Dish.class);
  }
}

在这里,我使用另一个映射器来简化字符串键的反序列化。您可以在示例中看到如何注册反序列化程序。

您的工作json将如下所示:

{
  "userEmail": "mail@mail.mail",
  "userName": "username",
  "dishQuantityMap": {
    "{\"id\":2,\"name\":\"food2\",\"description\":\"yummiest\"}": 19,
    "{\"id\":1,\"name\":\"food1\",\"description\":\"yummy\"}": 11
  }
}

请注意,映射中的键是如何将Dish对象转换为json字符串的,并正确转义引号。

还有一个例子:

    ObjectMapper mapper = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    //add key deserializer in module
    module.addKeyDeserializer(Dish.class, new DishKeyDeserializer());
    //register module
    mapper.registerModule(module);

    //getting the json as project resource, you get it however you need
    InputStream stream = ClassLoader.getSystemResourceAsStream("order.json");
    OrderDto parsedOrder = mapper.readValue(stream, OrderDto.class);

 类似资料:
  • 我使用以下列表从控制器填充了JSP中的下拉列表:“” 例如,我使用下拉菜单将5保存为db中thirdPartyOccupationId的值。当我重新加载页面时,值5不是选中的值。 同一段代码正在处理不同的字段,我不知道我错过了什么。 模型类: ReportClass.java 控制器.java 感谢任何指点。

  • 如何创建一个选项菜单,如以下屏幕截图: 点击RecyclerView项目的“更多”图标后,应打开选项菜单! 我的尝试是这样的: 但这会导致问题,因为如果我点击RecyclerView item More按钮,则会单击完整项目。。。 这是我的RecyclerViewOnTouchListener: 我没有发现任何类似的问题,所以我希望你能帮助我!

  • 我想从下面的列表中选择一个使用selenium的选项: 这里 但问题是没有列表可供选择。 在此输入图像说明 我到目前为止的代码: 需要帮助!!

  • 我无法找到一种方法来创建一个输入字段在Flutter将打开一个下拉的名字列表。Flutter material Widgets可能吗? 就像这样

  • 我是一个新手,所以请不要对我太苛刻!我试图理解如何构建屏幕并在其中来回导航,在导航过程中为其他屏幕带来价值。 我想建一个屏幕: 在lib中,我创建了一个models文件夹,其中包含cats.dart文件 我认为分离代码是一个好主意,在lib中创建另外两个文件夹,它们是 lib/屏幕 lib/小工具 因此,我在屏幕中创建了select_item.dart,在小部件中创建了cats_items.dar

  • 我是maven新手,想用maven创建一个spring项目。下面提到的是我正在使用的命令: 它要求: 选择数字或应用筛选器(格式:[groupId:]artifactId,区分大小写包含): 它在要求什么?我试了所有的号码,我得到了这个消息: 请帮帮忙。