当前位置: 首页 > 面试题库 >

Restful PUT方法的ModelAttribute未填充值(JSON)

徐知
2023-03-14
问题内容

我正在使用Spring
MVC建立一个完全宁静的Web应用程序。当我有一个PUT方法时,不会填充我的@ModelAttribute表单bean(所有值都为null)。如果我使用POST方法,则所有内容都会正确填充。

我用邮递员([https://chrome.google.com / webstore / detail / postman-rest-
客户/ fdmmgilgnpjigdojojpjoooidkmcomcm](https://chrome.google.com/webstore/detail/postman-
休息-
client / fdmmgilgnpjigdojojpjoooidkmcomcm))进行查询图像请求邮递员:http
//www.hostingpics.net /viewer.php?id
=
474577问题.jpg

@Entity
@Table(name =“ positiongps”)
公共类PositionGPS实现BaseEntity{
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name =“ id”,可空= false,columnDefinition =“ SERIAL”,可更新= false)
私有Long id;

@Column(name =“ latitude”,精度= 11,小数位= 7,columnDefinition =“ NUMERIC”,nullable = false,可更新= true,unique = false)
private BigDecimal latitude;

@Column(name =“经度”,精度= 11,小数位= 7,columnDefinition =“ NUMERIC”,nullable = false,可更新= true,唯一= false)
private BigDecimal经度;

//构造函数//

public PositionGPS(){
super();
纬度= new BigDecimal(“ 0”);
经度= new BigDecimal(“ 0”);
}

//获取并设置//

@Entity
@Table(name = "positiongps")
public class PositionGPS implements BaseEntity<Long> {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false, columnDefinition = "SERIAL", updatable = false)
private Long id;

@Column(name = "latitude", precision = 11, scale = 7, columnDefinition = "NUMERIC", nullable = false, updatable = true, unique = false)
private BigDecimal latitude;

@Column(name = "longitude", precision = 11, scale = 7, columnDefinition = "NUMERIC", nullable = false, updatable = true, unique = false)
private BigDecimal longitude;

// ** Constructeur **//

public PositionGPS() {
    super();
    latitude = new BigDecimal("0");
    longitude = new BigDecimal("0");
}

// ** Get and Set **//

@ResponseBody
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public boolean update(@ModelAttribute("positionGPS") PositionGPS positionGPS, @PathVariable Long id, Model model) {
    LOG.debug("update :: IN, PositionGPS.Id=[" + id + "]");
    PositionGPS positionGPSOld = positionGPSService.getById(id);
    LOG.debug("update :: getId=[" + positionGPS.getId() + "]");
    LOG.debug("update :: getLatitude=[" + positionGPS.getLatitude() + "]");
    LOG.debug("update :: getLongitude=[" + positionGPS.getLongitude() + "]");

    try {
        if (positionGPSOld != null) {
            positionGPSOld.setLatitude(positionGPS.getLatitude());
            positionGPSOld.setLongitude(positionGPS.getLongitude());
            PositionGPS newpositionGPS = positionGPSService.update(positionGPSOld);
        } else {
            LOG.debug("update :: PositionGPS Error test");
        }

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return true;
}

web.xml

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>httpMethodFilter</filter-name>
    <filter-  class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>httpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我的控制台:

DEBUG: PositionGPSController - update :: IN,   PositionGPS.Id=[136]
DEBUG: PositionGPSController - update :: getId=[136]
DEBUG: PositionGPSController - update :: getLatitude=[0]
DEBUG: PositionGPSController - update :: getLongitude=[0]

问题答案:

我取代

@ModelAttribute("positionGPS") PositionGPS positionGPS, @PathVariable Long id, Model model

对于

@RequestBody PositionGPS positionGPS, @PathVariable Long id, Model model)

链接帮助:http :
//docs.spring.io/spring/docs/current/spring-framework-
reference/html/mvc.html#mvc-config-
enable

SpringMVC:请勿反序列化JSON请求正文



 类似资料:
  • 我有一个非常简单的spring boot应用程序,我正在尝试使用一些外部配置。我试着按照spring boot文件上的信息去做,但是我遇到了一个障碍。 当我运行下面的应用程序时,application.properties文件中的外部配置不会填充到bean中的变量中。我肯定我在做傻事,谢谢你的建议。 mybean.Java(位于/src/main//foo/bar/中) application.J

  • 我有2个xml配置文件,如下所示 app-context.xml: test-cache.xml

  • 但是,当我运行使用maven从命令行生成的jar时,它不会读取application.properties,默认情况下,tomcat是在8080上启动的,我无法识别上下文。其他的一切都很好。 在eclipse中,我将:VM参数提供为: 我文章和问题看起来很相似,我已经引用了这篇文章,只有我引用了Application.Properteis来配置spring boot应用程序的自定义上下文和端口。我

  • 让我们从我正在使用的代码开始,我尝试了每一种可能的不同方法来生成“params”。我将其用作HashMap、Json格式以及字符串。我还试图通过创建一个hashmap并返回它来@Override getParams()方法。什么都没用。 下面是调用JsonObjectRequest的函数。 网址和其他一切都很好,我已经检查过了,但我只是不明白为什么既不GET或POST方法工作,因为我已经尝试了这两

  • 我有一个非常简单的Java/Spring应用程序来演示KStream的功能,但不幸的是,我无法使KStream加载数据。想法是创建一个KStream对象,并使用controller GET方法简单地检索其内容。示例代码: 问题-主题中有消息,但foreach(...)中的KStream枚举没有从中检索任何结果。KStream对象状态为“RUNning”,日志中没有错误。 生成随机应用程序ID并将A

  • 问题内容: 我正在尝试通过加入实体类来创建BO 我得到100个空BO,即所有属性均为null我的BO如下 ..... 当我删除aliasToBean行并遍历Object []时,我可以看到已获取正确的值,请指导我… 问题答案: 尝试显式地对项目进行别名化,以匹配Bean中的字段名称,如下所示: