Post json 至 struts 2 次操作

Post json to struts 2 action

我需要 post 一个简单的 json 对象到 Struts 2 动作,你能告诉我我错过了什么吗:

要保存的 Java 对象:

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer id;
@Column(name = "code")
private String code;
@Column(name = "libelle_fr")
private String libelleFr;
@Column(name = "libelle_nl")
private String libelleNl;

我用的是alpine.js但这是一个细节,发送请求调用的脚本是这个:

<script>
    function postForm() {
        return {
            indicateurDictionnaireForm: {
                libelleFr: '',
                libelleNl: '',
                code: ''
            },
            message: '',

            submitData() {
                this.message = ''

                fetch('<%= request.getContextPath() %>/mesures.ce.save.action', {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    dataType:"json",
                    body: JSON.stringify(this.indicateurDictionnaireForm)
                })
                    .then(() => {
                        this.message = 'Form sucessfully submitted!'
                    })
                    .catch(() => {
                        this.message = 'Ooops! Something went wrong!'
                    })
            }
        }
    }
</script>

发送到操作的json是:

{
"libelleFr":"fr",
"libelleNl":"nl",
"code":"sample"
}

在我的操作文件中,有一个从前面调用的方法:

private IndicateurDictionnaire indicateurDictionnaireForm;

// Action to save an indicateurDictionnaireto database
@Action(value = "mesures.indicateurs.ce.save", results = {
            @Result(name = "success", type = "json", params = {"root", "indicateurDictionnaireForm"}),
            @Result(name = "input", type = "tiles", params = {"root", "indicateurDictionnaireForm"}, location = "viewMesureCoutUnitaire")})
    public String save(IndicateurDictionnaire indicateurDictionnaire, String libelleFr, String libelleNl, String code) {
        dictionnaireIndicateurBo.saveIndicateurDictionnaire(indicateurDictionnaire);
        return SUCCESS;
    }

根据 struts2 json 插件,如果格式正确,json 应该映射到我的对象,但如果我在调试中查看,字段为空。

你知道我怎样才能至少在我的操作方法中看到 json 请求吗?

映射到操作的方法不使用方法签名中的任何参数。因此,您需要删除这些参数并将 json 拦截器添加到操作配置中。

此字段被 json 拦截器用作 root object,不应为 null

IndicateurDictionnaire indicateurDictionnaire;
// getter and setter should be added

@Action(value = "mesures.indicateurs.ce.save", results = {
    @Result(name = "success", type = "json", params = {"root", "indicateurDictionnaire"})
}, interceptorRefs = @InterceptorRef(value = "json", params = {"root", "indicateurDictionnaire"}))
public String save() {       
  dictionnaireIndicateurBo.saveIndicateurDictionnaire(indicateurDictionnaire);
  return SUCCESS;
}