Consider the following class:

public class Caps {
    public Sett SETTINGS {get;set;}
public class Sett {
    public string foo {get;set;}

When I POST the following JSON:


To my own REST class:

global static void doPost(Caps change) {

I get 400 Bad Request:

    "message": "Unexpected parameter encountered during deserialization: SETTINGS at [line:1, column:14]",
    "errorCode": "JSON_PARSER_ERROR"

However the exact same JSON can be de-serialised as follows:

String s = '{"SETTINGS":{"foo":"bar"}}';
Caps c = (Caps)JSON.deserialize(s, Caps.class);

As a workaround I can do the de-serialisation in my REST class:

global static ZRest.ZRestResponse doPost() {
    String req = RestContext.request.requestBody.toString();
    Caps change = (Caps)JSON.deserialize(req, Caps.class);

This works fine and I get 200.

The question is why doesn't the standard REST de-serialisation of parameters work?

PS: I read possible duplicate questions but they only seem to offer a workaround or the same string in a different format (newlines, indents) which doesn't solve my issue at all.

1 Answer 1


This is a consequence of Salesforce's design decision that allows for example this code:

global static void doPost(String x, Integer y) {

to accept this JSON:

    "x": "abc",
    "y": 123

The names and types of the method arguments form part of the JSON structure.

So in your case the following JSON would work:

  • Your first sentence seems like it's either ungrammatical or missing a link. Still, +1, this is good to know.
    – Adrian Larson
    Feb 22, 2016 at 16:59
  • @AdrianLarson I've added a few more words to try to improve.
    – Keith C
    Feb 22, 2016 at 17:21
  • Much less confusing for me! I made one more minor tweak, hope you don't mind.
    – Adrian Larson
    Feb 22, 2016 at 17:23
  • @AdrianLarson No problem.
    – Keith C
    Feb 22, 2016 at 17:25
  • It would be icing on the cake if you can find a supporting documentation link.
    – Adrian Larson
    Feb 22, 2016 at 17:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .